Bug #66705 [Opn->Nab]: format inaccurate after setTimezone
| From: | requinix@php.net | Date: | Thu, 13 Feb 2014 04:04:06 +0000 |
| Subject: | Bug #66705 [Opn->Nab]: format inaccurate after setTimezone | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-184279@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=66705&edit=1
ID: 66705
Updated by: requinix@php.net
Reported by: chris at codewiz dot biz
Summary: format inaccurate after setTimezone
-Status: Open
+Status: Not a bug
Type: Bug
Package: Date/time related
Operating System: Ubuntu 13.10
PHP Version: 5.5.3
Block user comment: N
Private report: N
New Comment:
The "01" is because you used the 12-hour format 'h' instead of the 24-hour
format 'H'.
http://www.php.net/date
Previous Comments:
------------------------------------------------------------------------
[2014-02-13 03:03:44] chris at codewiz dot biz
fixed version and os
------------------------------------------------------------------------
[2014-02-13 03:01:20] chris at codewiz dot biz
Description:
------------
---
From manual page: http://www.php.net/datetime.format
---
What is happening:
DateTime()->format() method strange behaviour after DateTime->setTimezone().
Ignores the public date property, Expected return value (format mask applied) should be based on the
current public timezone and date properties.
Format method should apply the argument format mask to the date property based on current timezone
property. Instead it appears that an unknown/undocumented modification to the date property is
applied.
test script outputs;
$nowUtc
object(DateTime)[2607]
public 'date' => string '2014-02-13 02:42:48' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
$nowUtc->format('Y-m-d h:i:s')
string '2014-02-13 02:42:48' (length=19)
$nowUtc->setTimezone( new \DateTimeZone( 'Australia/Sydney' ) )
object(DateTime)[2608]
public 'date' => string '2014-02-13 13:42:48' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'Australia/Sydney' (length=16)
$nowUtc->format('Y-m-d h:i:s')
string '2014-02-13 01:42:48' (length=19) // expected 2014-02-13 13:42:48 based on
Australia/Sydney
What is 2014-02-13 01:42:48 from anyway!
Test script:
---------------
<?php
$nowUtc = new \DateTime( 'now', new \DateTimeZone( 'UTC' ) );
echo '$nowUtc'.PHP_EOL;
var_dump($nowUtc);
$nowUtc = new \DateTime( 'now', new \DateTimeZone( 'UTC' ) );
echo '$nowUtc->format(\'Y-m-d h:i:s\')'.PHP_EOL;
var_dump($nowUtc->format('Y-m-d h:i:s'));
$nowUtc->setTimezone( new \DateTimeZone( 'Australia/Sydney' ) );
echo '$nowUtc->setTimezone( new \DateTimeZone( \'Australia/Sydney\' )
)'.PHP_EOL;
var_dump($nowUtc);
echo '$nowUtc->format(\'Y-m-d h:i:s\')'.PHP_EOL;
var_dump($nowUtc->format('Y-m-d h:i:s'));exit;
?>
Expected result:
----------------
format method should apply the argument format mask to the date property based on current timezone
property.
Actual result:
--------------
Instead it appears that an unknown/undocumented modification to the date property is applied.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=66705&edit=1