note 94988 added to datetime.add

From: 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

« previous php.notes (#163633) next »