Bug #69943 [Com]: DateTime::add() and sub() doesn't account for TZ transitions

From: Date: Fri, 26 Jun 2015 16:58:21 +0000
Subject: Bug #69943 [Com]: DateTime::add() and sub() doesn't account for TZ transitions
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-193919@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69943&edit=1 ID: 69943 Comment by: kernins at gmail dot com Reported by: kernins at gmail dot com Summary: DateTime::add() and sub() doesn't account for TZ transitions Status: Open Type: Bug Package: Date/time related Operating System: Linux PHP Version: 5.6.10 Block user comment: N Private report: N New Comment: Also 5.3.0 - 5.3.6 results looks interesting (note the diff() result and offsets) int(1) string(24) "2014-10-26T02:59:59+0300" string(24) "2014-10-25T23:59:59+0400" Previous Comments: ------------------------------------------------------------------------ [2015-06-26 16:55:32] kernins at gmail dot com Description: ------------ See the snippet http://3v4l.org/YgUIV diff() behaves correctly, but add/sub - not. PHP 5.4.34-5.4.42 and 5.5.18-5.6.10 are affected As for older versions showing 1 hour difference - does php use its own bundled tzdata instead of system one? It may explain The dates in example are around latest Europe/Moscow transition from +04:00 to +03:00 happened at 2014-10-25T22:00:00 UTC (01:59:59+04:00 + 1sec -> 01:00:00+03:00) Test script: --------------- $tz=new DateTimeZone('Europe/Moscow'); $d1=new DateTime('2014-10-26T00:59:59', $tz); $d2=new DateTime('2014-10-26T01:59:59', $tz); var_dump($d2->diff($d1, true)->h); var_dump($d1->add($int=new DateInterval('PT2H'))->format(DateTime::ISO8601), $d2->sub($int)->format(DateTime::ISO8601)); Expected result: ---------------- Consistent add/sub results assuming 2hrs difference between test dates 2014-10-26T01:59:59+0300 for add() 2014-10-26T00:59:59+0400 for sub() Actual result: -------------- http://3v4l.org/YgUIV diff=2 2014-10-26T02:59:59+0300 2014-10-25T23:59:59+0400 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=69943&edit=1

« previous php.bugs (#193919) next »