[PHP-BUG] Bug #64908 [NEW]: DateTime's constructor accepts time that not exists because of DST

2013-05-23 Thread istvan dot dani at gmail dot com
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

2013-05-23 Thread istvan dot dani at gmail dot com
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