Edit report at http://bugs.php.net/bug.php?id=51096&edit=1
ID: 51096 Comment by: wayne530 at gmail dot com Reported by: phpbugs at rizzt dot kicks-ass dot org Summary: strtotime returns wrong results Status: Assigned Type: Bug Package: Date/time related Operating System: linux PHP Version: 5.2.12 Assigned To: derick New Comment: @derick can you comment on what exactly should be the behavior of strtotime('-1 month') or strtotime('last month')? today 3/31/10 date('Y-m-d', strtotime('-1 month')) returns '2010-03-03' date('Y-m-d', strtotime('+1 month')) returns '2010-05-01' -1 month seems to offset by 28 days. +1 month seems to offset by 31 days. is this correct behavior? Previous Comments: ------------------------------------------------------------------------ [2010-03-31 15:32:08] der...@php.net @marques: You're wrong, that's perfectly correct behaviour for last month/previous month. It is also unrelated to this report. ------------------------------------------------------------------------ [2010-03-31 15:14:20] marques at displague dot com This one is a clearer case of strtotime being bad: echo date("Y-m-d",strtotime("february", strtotime("march 31 2010"))); 2010-03-03 ------------------------------------------------------------------------ [2010-03-31 14:33:37] marques at displague dot com I'm not sure there would be consensus on my expected return values here, but it makes more sense then getting March as a result. Reproduce code: --------------- date_default_timezone_set('America/New_York'); echo date(DATE_RFC822,strtotime('march 31 2010 -1 month')); echo date(DATE_RFC822,strtotime('march 30 2010 -1 month')); echo date(DATE_RFC822,strtotime('march 29 2010 -1 month')); echo date(DATE_RFC822,strtotime('march 28 2010 -1 month')); Expected result: ---------------- Sun, 28 Feb 10 00:00:00 -0500 Sun, 28 Feb 10 00:00:00 -0500 Sun, 28 Feb 10 00:00:00 -0500 Sun, 28 Feb 10 00:00:00 -0500 Actual result: ---------------- Wed, 03 Mar 10 00:00:00 -0500 Tue, 02 Mar 10 00:00:00 -0500 Mon, 01 Mar 10 00:00:00 -0500 Sun, 28 Feb 10 00:00:00 -0500 ------------------------------------------------------------------------ [2010-03-31 14:23:58] marques at displague dot com This may be fodder for another bug report, but strtotime() more specifically "returns wrong results" for the last three days of March 2010. date_default_timezone_set('America/New_York'); echo PHP_VERSION."\n". date(DATE_RFC822)."\n". date(DATE_RFC822,strtotime('last month')); 5.3.1 Wed, 31 Mar 10 08:21:30 -0400 Wed, 03 Mar 10 08:21:30 -0500 This was also posted as a PHP.net comment: http://www.php.net/manual/en/function.strtotime.php#97065 ------------------------------------------------------------------------ [2010-03-09 09:49:36] der...@php.net Re-opening because of the question marks: firstdayof = 'first day of'?; lastdayof = 'last day of'?; It shouldn't cause an issue though, but it needs fixing. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=51096 -- Edit this bug report at http://bugs.php.net/bug.php?id=51096&edit=1