I have a PHP date in the form of 2013-01-22
and I want to get tomorrows date in the same format, so for example 2013-01-23
.
How is this pos
Use DateTime
$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');
Or:
$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
Or:
$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');
Or in PHP 5.4+:
echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
->format('Y-m-d H:i:s');
echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));
/**
* get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
*
* @param string
*
* @return string
*/
public static function getTomorrowsDate($format = 'Y-m-d')
{
$date = new DateTime();
$date->add(DateInterval::createFromDateString('tomorrow'));
return $date->format($format);
}
By strange it can seem it works perfectly fine: date_create( '2016-02-01 + 1 day' );
echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );
Should do it
First, coming up with correct abstractions is always a key. key to readability, maintainability, and extendability.
Here, quite obvious candidate is an ISO8601DateTime
. There are at least two implementations: first one is a parsed datetime from a string, and the second one is tomorrow. Hence, there are two classes that can be used, and their combination results in (almost) desired outcome:
new Tomorrow(new FromISO8601('2013-01-22'));
Both objects are an ISO8601 datetime, so their textual representation is not exactly what you need. So the final stroke is to make them take a date-form:
new Date(
new Tomorrow(
new FromISO8601('2013-01-22')
)
);
Since you need a textual representation, not just an object, you invoke a value()
method.
For more about this approach, take a look at this post.
Since you tagged this with strtotime, you can use it with the +1 day
modifier like so:
$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));
That said, it's a much better solution to use DateTime.