[PHP-BUG] Bug #64908 [NEW]: DateTime's constructor accepts time that not exists because of DST
From: istvan dot dani at gmail dot com Operating system: OS X 10.8 PHP version: Irrelevant Package: Date/time related Bug Type: Bug Bug description:DateTime's constructor accepts time that not exists because of DST Description: Europe/Budapest timezone offset is +1, and +2 in DST. Transition to DST is at 2013-03-31 01:00:00 UTC/GMT. According to this, locale time should not exists between 02:00:00 and 03:00:00, and must not be accepted as valid time. Test script: --- try { $wrong_date = new DateTime("2013-03-31 02:30:00", new DateTimeZone("Europe/Budapest")); } catch (Exception $e) { echo $e->getMessage(); } print "Wrong date in local timezone: " . $wrong_date->format("Y-m-d H:i:s"); $wrong_date->setTimezone(new DateTimeZone("UTC")); print "Converting to UTC: " . $wrong_date->format("Y-m-d H:i:s"); $wrong_date->setTimezone(new DateTimeZone("Europe/Budapest")); print "Converting back to locale timezone: " . $wrong_date->format("Y-m-d H:i:s"); Expected result: Get an exception. Actual result: -- Wrong date in local timezone: 2013-03-31 02:30:00 Converting to UTC: 2013-03-31 01:30:00 Converting back to locale timezone: 2013-03-31 03:30:00 -- Edit bug report at https://bugs.php.net/bug.php?id=64908&edit=1 -- Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=64908&r=trysnapshot54 Try a snapshot (PHP 5.3): https://bugs.php.net/fix.php?id=64908&r=trysnapshot53 Try a snapshot (trunk): https://bugs.php.net/fix.php?id=64908&r=trysnapshottrunk Fixed in SVN: https://bugs.php.net/fix.php?id=64908&r=fixed Fixed in release: https://bugs.php.net/fix.php?id=64908&r=alreadyfixed Need backtrace: https://bugs.php.net/fix.php?id=64908&r=needtrace Need Reproduce Script: https://bugs.php.net/fix.php?id=64908&r=needscript Try newer version: https://bugs.php.net/fix.php?id=64908&r=oldversion Not developer issue:https://bugs.php.net/fix.php?id=64908&r=support Expected behavior: https://bugs.php.net/fix.php?id=64908&r=notwrong Not enough info: https://bugs.php.net/fix.php?id=64908&r=notenoughinfo Submitted twice: https://bugs.php.net/fix.php?id=64908&r=submittedtwice register_globals: https://bugs.php.net/fix.php?id=64908&r=globals PHP 4 support discontinued: https://bugs.php.net/fix.php?id=64908&r=php4 Daylight Savings: https://bugs.php.net/fix.php?id=64908&r=dst IIS Stability: https://bugs.php.net/fix.php?id=64908&r=isapi Install GNU Sed:https://bugs.php.net/fix.php?id=64908&r=gnused Floating point limitations: https://bugs.php.net/fix.php?id=64908&r=float No Zend Extensions: https://bugs.php.net/fix.php?id=64908&r=nozend MySQL Configuration Error: https://bugs.php.net/fix.php?id=64908&r=mysqlcfg
Bug #64908 [Nab]: DateTime's constructor accepts time that not exists because of DST
Edit report at https://bugs.php.net/bug.php?id=64908&edit=1 ID: 64908 User updated by:istvan dot dani at gmail dot com Reported by:istvan dot dani at gmail dot com Summary:DateTime's constructor accepts time that not exists because of DST Status: Not a bug Type: Bug Package:Date/time related Operating System: OS X 10.8 PHP Version:Irrelevant Block user comment: N Private report: N New Comment: Yep. Manual at http://hu1.php.net/manual/en/datetime.construct.php says: "If an invalid date is specified, then an exception is now thrown. Previously an error was emitted." Previous Comments: [2013-05-23 17:22:23] der...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php PHP's date time handling auto-corrects wrong date/time values. This is similar to doing: class DateTime#1 (3) { public $date => string(19) "2013-05-01 00:00:00" public $timezone_type => int(3) public $timezone => string(13) "Europe/London" } -------------------- [2013-05-23 08:30:06] istvan dot dani at gmail dot com Description: Europe/Budapest timezone offset is +1, and +2 in DST. Transition to DST is at 2013-03-31 01:00:00 UTC/GMT. According to this, locale time should not exists between 02:00:00 and 03:00:00, and must not be accepted as valid time. Test script: --- try { $wrong_date = new DateTime("2013-03-31 02:30:00", new DateTimeZone("Europe/Budapest")); } catch (Exception $e) { echo $e->getMessage(); } print "Wrong date in local timezone: " . $wrong_date->format("Y-m-d H:i:s"); $wrong_date->setTimezone(new DateTimeZone("UTC")); print "Converting to UTC: " . $wrong_date->format("Y-m-d H:i:s"); $wrong_date->setTimezone(new DateTimeZone("Europe/Budapest")); print "Converting back to locale timezone: " . $wrong_date->format("Y-m-d H:i:s"); Expected result: Get an exception. Actual result: -- Wrong date in local timezone: 2013-03-31 02:30:00 Converting to UTC: 2013-03-31 01:30:00 Converting back to locale timezone: 2013-03-31 03:30:00 -- Edit this bug report at https://bugs.php.net/bug.php?id=64908&edit=1