Doc #65747 [Com]: DateTime __construct error
| From: | vascowhite at gmail dot com | Date: | Mon, 30 Sep 2013 06:24:13 +0000 |
| Subject: | Doc #65747 [Com]: DateTime __construct error | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-10332@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=65747&edit=1
ID: 65747
Comment by: vascowhite at gmail dot com
Reported by: mwiseman at dogandtuba dot com
Summary: DateTime __construct error
Status: Open
Type: Documentation Problem
Package: Date/time related
Operating System: Windows
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Is the bug in the constructor of DateTimeZone then? This does not recognize the
single letter timezones.
$tz = new \DateTimeZone('z');
Will raise an exception.
Previous Comments:
------------------------------------------------------------------------
[2013-09-30 03:09:56] gabri dot ns at gmail dot com
IMO, the one that should be fixed is strtotime documentation,
since this behaviour came from thus function. As doumentation say,
the first argument should be time string, that -i think- will be
parsed by strtotime function.
Test script:
---------------
echo date('Y-m-d H:i:s',strtotime('now'))."\n";
echo date('Y-m-d H:i:s',strtotime('a'))."\n";
Actual result:
--------------
2013-09-30 10:07:18
2013-09-30 16:07:18
------------------------------------------------------------------------
[2013-09-29 22:43:05] requinix@php.net
Expected but undocumented behavior.
Single characters correspond to military timezones. See
http://en.wikipedia.org/wiki/List_of_military_time_zones
foreach (range("a", "z") as $l) {
if ($l == "j") continue;
printf("%s = %s\n", $l, (new DateTime($l))->format("r"));
}
So the list of timezones documentation should be updated to mention these.
------------------------------------------------------------------------
[2013-09-29 15:56:59] vascowhite at gmail dot com
Related To: Bug #65787
------------------------------------------------------------------------
[2013-09-23 23:44:15] mwiseman at dogandtuba dot com
Description:
------------
Constructing a DateTime object with a string argument of 1 character creates a DateTime object set
to now, instead of throwing an exception.
If the string contains two characters (e.g. DateTime('aa')) an exception is thrown.
Test script:
---------------
<?php
date_default_timezone_set('America/Los_Angeles');
$d = new DateTime('x');
echo $d->format('y-m-d');
?>
Expected result:
----------------
Throw an exception
Actual result:
--------------
Valid DateTime object set to now.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=65747&edit=1