Edit report at http://bugs.php.net/bug.php?id=52480&edit=1
ID: 52480 Updated by: der...@php.net Reported by: alex dot joyce at staff dot comcen dot com dot au Summary: Incorrect difference using DateInterval -Status: Open +Status: Assigned Type: Bug Package: Date/time related Operating System: Debian 5.0.3 PHP Version: 5.3.3 -Assigned To: +Assigned To: derick Block user comment: N New Comment: This is going to be a fun one to fix :-/ Previous Comments: ------------------------------------------------------------------------ [2010-07-30 01:40:02] alex dot joyce at staff dot comcen dot com dot au Changing the timezone shows a difference. Australia/Sydney (default): 5 months UTC: 4 months 28 days ------------------------------------------------------------------------ [2010-07-29 09:35:01] degeb...@php.net With the timezone set to Europe/Copenhagen, I get the same results as submitter. When set to UTC, I get the same results on Rasmus. This is on Ubuntu 10.04. dan...@daniel-laptop:~$ php -v PHP 5.3.4-dev (cli) (built: Jul 29 2010 09:30:24) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies ------------------------------------------------------------------------ [2010-07-29 09:15:41] ras...@php.net I don't see why I can't reproduce it then. Try adding a call to date_default_timezone_set() to the top of your script and work in UTC to eliminate local timezone issues. date_default_timezone_set('UTC'); $date_start = new DateTime('2010-03-01'); $date_end = new DateTime('2010-07-29'); $interval = $date_start->diff($date_end); print_r($interval); ------------------------------------------------------------------------ [2010-07-29 08:52:20] alex dot joyce at staff dot comcen dot com dot au 28/29, it doesn't matter. I'm only interested in the months. I've tried: 1) FreeBSD 6, PHP 5.3.2 2) Debian 4, PHP 5.3.2 3) Debian 6, PHP 5.3.2/PHP 5.3.3 I upgraded that last one to submit this bug report, same fault. All compiled from source. ------------------------------------------------------------------------ [2010-07-29 08:27:50] ras...@php.net Don't you mean 4 months and 28 days in the expected results? 7-3=4, 29-1=28 And that is exactly what I get on my Debian box with PHP 5.3.3: php > $date_start = new DateTime('2010-03-01'); php > $date_end = new DateTime('2010-07-29'); php > php > $interval = $date_start->diff($date_end); php > php > print_r($interval); DateInterval Object ( [y] => 0 [m] => 4 [d] => 28 [h] => 0 [i] => 0 [s] => 0 [invert] => 0 [days] => 150 ) Are you using 5.3.3 built from our sources or are you using a Debian-packaged version? ------------------------------------------------------------------------ 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=52480 -- Edit this bug report at http://bugs.php.net/bug.php?id=52480&edit=1