|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2018-02-17 05:56 UTC] anton at zebooka dot com
Description:
------------
This function outputs incorrect timezone.
Instead of outputting historical timezone for specified timestamp, it outputs current one.
TZ = Asia/Novosibirsk
We have changed timezone several times in Russia, Novosibirsk.
We dropped DST in 26 of March 2011 and added +1 hour permanently to TZ.
Then in 2014 government decided to move back to "winter time" and -1 hour from timezones. Then in summer 2016 local goverments of several states moved back to "summer time" and added +1 hour.
$ zdump -v /usr/share/zoneinfo/Asia/Novosibirsk | tail -n10
/usr/share/zoneinfo/Asia/Novosibirsk Sat Oct 30 19:59:59 2010 UTC = Sun Oct 31 02:59:59 2010 +07 isdst=1
/usr/share/zoneinfo/Asia/Novosibirsk Sat Oct 30 20:00:00 2010 UTC = Sun Oct 31 02:00:00 2010 +06 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Mar 26 19:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 +06 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Mar 26 20:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 +07 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Oct 25 18:59:59 2014 UTC = Sun Oct 26 01:59:59 2014 +07 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Oct 25 19:00:00 2014 UTC = Sun Oct 26 01:00:00 2014 +06 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Jul 23 19:59:59 2016 UTC = Sun Jul 24 01:59:59 2016 +06 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Sat Jul 23 20:00:00 2016 UTC = Sun Jul 24 03:00:00 2016 +07 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 10:14:07 2038 +07 isdst=0
/usr/share/zoneinfo/Asia/Novosibirsk Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 10:14:07 2038 +07 isdst=0
strftime() output current +0700 TZ for historical date in 2015 year, although date() function returns correct TZ +0600.
Incorrect:
php > echo strftime('%Y-%m-%d %H:%M:%S %z', strtotime("2015-11-15"));
2015-11-15 00:00:00 +0700
Correct:
php > echo date('Y-m-d H:i:s O', strtotime("2015-11-15"));
2015-11-15 00:00:00 +0600
Test script:
---------------
echo strftime('%Y-%m-%d %H:%M:%S %z', strtotime("2015-11-15"));
Expected result:
----------------
2015-11-15 00:00:00 +0600
Actual result:
--------------
2015-11-15 00:00:00 +0700
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 22 19:00:02 2025 UTC |
I can't reproduce this: [PHP: 7.1.15-dev ] derick@singlemalt:~ $ php -r "date_default_timezone_set('Asia/Novosibirsk'); echo strftime('%Y-%m-%d %H:%M:%S %z', strtotime('2015-11-15'));" 2015-11-15 00:00:00 +0600zebooka@zebooka-pro ~ $ uname -a Darwin zebooka-pro.local 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64 zebooka@zebooka-pro ~ $ php -r "date_default_timezone_set('Asia/Novosibirsk'); echo strftime('%Y-%m-%d %H:%M:%S %z', strtotime('2015-11-15'));" 2015-11-15 00:00:00 +0700 zebooka@zebooka-pro ~ $ php -v PHP 7.1.14 (cli) (built: Feb 2 2018 08:42:59) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies