note 94988 added to datetime.add
| From: | kb at imodus dot pl | Date: | Mon, 07 Dec 2009 09:56:29 +0000 |
| Subject: | note 94988 added to datetime.add | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-163633@lists.php.net to get a copy of this message | ||
As noted in DateTime::modify comment The P6M sometimes gives nonintuitive results, especially for
last day of the month: 2009-05-31 + 1 month = 2009-06-31 => 2009-07-01;
To get expected behavior convert the date to first day of month , modify date, than use
't' for day in format to get last day of the month.
Example:
<?php
$f = 'Y-m-d H:i:s';
$f1 = 'Y-m-01 H:i:s';
$fL = 'Y-m-t H:i:s';
//EXPECTED
$lastDayOfTheMonth = new DateTime('2009-12-31 00:00:00');
$firstDayOfTheMonth = new DateTime($lastDayOfTheMonth->format($f1));
//echoes 2009-06-30
echo $lastDayNext6Months = $firstDayOfTheMonth->add(new
DateInterval("P6M"))->format($fL),'<br />';
//NON-EXPECTED
$lastDayOfTheMonth = new DateTime('2009-12-31 00:00:00');
//echoes 2009-07-01
echo $lastDayNext6Months = $lastDayOfTheMonth->add(new
DateInterval("P6M"))->format($f),'<br />';
?>
----
Server IP: 69.147.83.197
Probable Submitter: 213.227.92.152
----
Manual Page -- http://www.php.net/manual/en/datetime.add.php
Edit -- https://master.php.net/note/edit/94988
Del: integrated -- https://master.php.net/note/delete/94988/integrated
Del: useless -- https://master.php.net/note/delete/94988/useless
Del: bad code -- https://master.php.net/note/delete/94988/bad+code
Del: spam -- https://master.php.net/note/delete/94988/spam
Del: non-english -- https://master.php.net/note/delete/94988/non-english
Del: in docs -- https://master.php.net/note/delete/94988/in+docs
Del: other reasons-- https://master.php.net/note/delete/94988
Reject -- https://master.php.net/note/reject/94988
Search -- https://master.php.net/manage/user-notes.php