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

From: Date: Tue, 13 Mar 2018 03:39:35 +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-214319@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: Feedback Type: Bug Package: Date/time related Operating System: macOS 10.13.3 PHP Version: 7.1.14 Assigned To: cmb Block user comment: N Private report: N New Comment: Yes it is. But +0700 is output with strftime, while it should be +0600 Previous Comments: ------------------------------------------------------------------------ [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

« previous php.bugs (#214319) next »