Bug #75975 [Com]: strftime prints current timezone instead of historical

From: Date: Tue, 13 Mar 2018 13:36:18 +0000
Subject: Bug #75975 [Com]: strftime prints current timezone instead of historical
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-214334@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75975&edit=1

 ID:                 75975
 Comment by:         anton at zebooka dot com
 Reported by:        anton at zebooka dot com
 Summary:            strftime prints current timezone instead of
                     historical
 Status:             Open
 Type:               Bug
 Package:            Date/time related
 Operating System:   macOS 10.13.3
 PHP Version:        7.1.14
 Block user comment: N
 Private report:     N

 New Comment:

zebooka@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


Previous Comments:
------------------------------------------------------------------------
[2018-03-13 12:48:44] derick@php.net

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 +0600

------------------------------------------------------------------------
[2018-03-13 12:08:36] cmb@php.net

Oops, sorry, the OP was pretty clear about that.

------------------------------------------------------------------------
[2018-03-13 03:39:34] anton at zebooka dot com

Yes it is. But +0700 is output with strftime, while it should be +0600

------------------------------------------------------------------------
[2018-02-19 16:31:20] cmb@php.net

Isn't +0600 to be expected given the zdump of your database?

------------------------------------------------------------------------
[2018-02-17 05:56:53] 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


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=75975&edit=1


Thread (8 messages)

« previous php.bugs (#214334) next »