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: <?php $n = new DateTime("2013-04-31"); var_dump( $n ); ?> 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 "<br />Converting to UTC: " . $wrong_date->format("Y-m-d H:i:s"); $wrong_date->setTimezone(new DateTimeZone("Europe/Budapest")); print "<br />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