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] [email protected]
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] [email protected]
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