Edit report at https://bugs.php.net/bug.php?id=52480&edit=1
ID: 52480 Comment by: jan at jankramer dot eu Reported by: alex dot joyce at staff dot comcen dot com dot au Summary: Incorrect difference using DateInterval Status: Assigned Type: Bug Package: Date/time related Operating System: Debian 5.0.3 PHP Version: 5.3.3 Assigned To: derick Block user comment: N Private report: N New Comment: I think this bug is hasn't been fixed yet. Below is a reproduction on Ubuntu 11.10 with PHP 5.3.6. DateTime Object #1: ( [date] => 2011-12-01 00:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) DateTime Object #2: ( [date] => 2012-02-01 00:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) DateTime Object #3: ( [date] => 2011-12-01 12:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) DateTime Object #4: ( [date] => 2012-02-01 12:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) DateInterval Object #1 & #2 ( [y] => 0 [m] => 2 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [invert] => 0 [days] => 62 ) DateInterval Object #3 & #4 ( [y] => 0 [m] => 2 [d] => 0 [h] => 0 [i] => 0 [s] => 0 [invert] => 0 [days] => 62 ) The difference in the 'd' attribute is very strange... Previous Comments: ------------------------------------------------------------------------ [2011-06-13 10:51:00] petros at rufunka dot com The problem lies between the last day of February and first day of March. At the following example: $first = new DateTime('2011-03-01'); $second = new DateTime('2011-03-29'); $interval = $second->diff($first); will get the wrong result. If I set my timezone to Europe/Stockholm which is +1 GMT then if i set the $first = new DateTime(â2011-03-01 00:59:00â²); I still get the wrong result. However an hour value above or equal to +1 ie $first = new DateTime(â2011-03-01 01:00:00â²); will give the correct example. So if you are GMT + 2 you need to have a value above or equal to 2011-03-01 02:00:00. A quick fix, as mentioned above, is to set your timezone to UTC: date_default_timezone_set(âUTCâ); and in this case you match the time with the needed in order to get correct results. Another example with the opposite results is to set your timezone to: date_default_timezone_set(âAmerica/Mexico_Cityâ); $first = new DateTime(â2011-02-28 22:01:00â²); $second = new DateTime(â2011-03-29 03:00:00â²); then the diff will think that you are in the same month. ------------------------------------------------------------------------ [2011-04-12 16:37:51] fischer at wild-east dot de This happens only when setting a DateTime without the time part or a time below 02:00:00. At least for the 'Europe/Berlin' timezone. ------------------------------------------------------------------------ [2010-07-30 10:46:55] der...@php.net This is going to be a fun one to fix :-/ ------------------------------------------------------------------------ [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. daniel@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 ------------------------------------------------------------------------ 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 https://bugs.php.net/bug.php?id=52480 -- Edit this bug report at https://bugs.php.net/bug.php?id=52480&edit=1