Bug #53833 [Opn->Wfx]: DateTime::createFromFormat's DateTimeZone parameter ignored
| From: | derick@php.net | Date: | Tue, 25 Jan 2011 09:26:46 +0000 |
| Subject: | Bug #53833 [Opn->Wfx]: DateTime::createFromFormat's DateTimeZone parameter ignored | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-158162@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53833&edit=1
ID: 53833
Updated by: derick@php.net
Reported by: alex dot joyce at staff dot comcen dot com dot au
Summary: DateTime::createFromFormat's DateTimeZone parameter
ignored
-Status: Open
+Status: Wont fix
Type: Bug
Package: Date/time related
Operating System: Debian 5.0.3
PHP Version: 5.3.5
Block user comment: N
Private report: N
New Comment:
This behaviour is written down in the docs:
http://uk3.php.net/manual/en/datetime.construct.php
the @ also means a timezone of UTC here. If I would be writing this code
again, then I would most likely not have done it like this; but changing
it breaks BC (including some of my own code), so I don't think I would
like to change it now.
Previous Comments:
------------------------------------------------------------------------
[2011-01-25 03:43:59] alex dot joyce at staff dot comcen dot com dot au
Description:
------------
I'm loading a DateTime object by a UNIX timestamp.
I assumed it would use the local timezone configured (e.g. date()
behavior) but it defaults to UTC.
When passing a DateTimeZone object into the third parameter of
DateTime::createFromFormat, it does nothing.
Setting the timezone using DateTime::setTimezone after the DateTime
object has loaded gives the correct result.
See examples.
Test script:
---------------
<?php
$time = 1293800400;
$tz = new DateTimeZone('Australia/Sydney');
// assumes local timezone
var_dump(date('r', $time));
// sets to "+00:00", should assume local timezone
var_dump(DateTime::createFromFormat('U', $time));
// sets to "+00:00", ignores given DateTimeZone object
var_dump(DateTime::createFromFormat('U', $time, $tz));
// adjusts to given timezone correctly
var_dump(DateTime::createFromFormat('U', $time)->setTimezone($tz));
Expected result:
----------------
string(31) "Sat, 01 Jan 2011 00:00:00 +1100"
object(DateTime)#2 (3) {
["date"]=>
string(19) "2011-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Australia/Sydney"
}
object(DateTime)#2 (3) {
["date"]=>
string(19) "2011-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Australia/Sydney"
}
object(DateTime)#2 (3) {
["date"]=>
string(19) "2011-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Australia/Sydney"
}
Actual result:
--------------
string(31) "Sat, 01 Jan 2011 00:00:00 +1100"
object(DateTime)#2 (3) {
["date"]=>
string(19) "2010-12-31 13:00:00"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
object(DateTime)#2 (3) {
["date"]=>
string(19) "2010-12-31 13:00:00"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}
object(DateTime)#2 (3) {
["date"]=>
string(19) "2011-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Australia/Sydney"
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53833&edit=1