Edit report at https://bugs.php.net/bug.php?id=52480&edit=1

 ID:                 52480
 Comment by:         map at wafriv dot de
 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've got the same problem with PHP 5.3.8 on Windows. Like petros at rufunka dot 
com said, there is a difference of 1 hour between Europe/Berlin and UTC.

object(DateTime)[1]
  public 'date' => string '2012-02-25 13:17:52' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Berlin' (length=13)
object(DateTime)[2]
  public 'date' => string '2010-08-07 07:01:25' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Berlin' (length=13)
object(DateInterval)[3]
  public 'y' => int 1
  public 'm' => int 6
  public 'd' => int 18
  public 'h' => int 6
  public 'i' => int 16
  public 's' => int 27
  public 'invert' => int 1
  public 'days' => int 567
object(DateTime)[4]
  public 'date' => string '2012-02-25 12:17:52' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)
object(DateTime)[1]
  public 'date' => string '2010-08-07 05:01:25' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)
object(DateInterval)[2]
  public 'y' => int 1
  public 'm' => int 6
  public 'd' => int 18
  public 'h' => int 7
  public 'i' => int 16
  public 's' => int 27
  public 'invert' => int 1
  public 'days' => int 567


Previous Comments:
------------------------------------------------------------------------
[2012-01-31 12:37:38] jan at jankramer dot eu

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...

------------------------------------------------------------------------
[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

------------------------------------------------------------------------


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

Reply via email to