Edited at

AWS EC2にPHP7.3.2を入れたらTimezoneがおかしかった話


概要


  • 1:Amazon Linux 2にPHP7.3.2を入れたら、、


    • OSのタイムゾーン設定はAsia/Tokyo

    • timezoneをAsia/Tokyoにしてるにも関わらずUTCの日時になる

    • 他のtimezoneに設定してもやっぱりUTCの日時になる

    • なお、pythonでは問題なかった



  • 2:PHP 7.3.3にupdateしたら解決した


    • ちゃんとJSTな日時が取れた




1:Amazon Linux 2にPHP7.3.2を入れた

yumでインストールした。

OSのタイムゾーン設定はAsia/Tokyo。

$ strings /etc/localtime

TZif2
TZif2
JST-9
$ sudo cat /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
$ sudo timedatectl
Local time: 日 2019-03-31 11:46:36 JST
Universal time: 日 2019-03-31 02:46:36 UTC
RTC time: 日 2019-03-31 02:46:36
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
$ date
2019年 3月 31日 日曜日 11:46:51 JST

PHPのtimezoneをAsia/Tokyoにしてるにも関わらずUTCの日時になる。

なんでやの。

$ php -v

PHP 7.3.2 (cli) (built: Feb 15 2019 19:06:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.2, Copyright (c) 1998-2018 Zend Technologies
$ less /etc/php.ini | grep "date.timezone"
; http://php.net/date.timezone
date.timezone = Asia/Tokyo
$ php -a
Interactive shell

php > echo date_default_timezone_get();
Asia/Tokyo
php > echo date("Y/m/d H:i:s P");
2019/03/31 02:47:17 +00:00

他のtimezoneに設定してもやっぱりUTCの日時になる

$ php -a

Interactive shell
php > echo date_default_timezone_set("Asia/Taipei");
1
php > echo date("Y/m/d H:i:s P");
2019/03/31 03:15:01 +00:00
php > echo date_default_timezone_get();
Asia/Taipei
php > echo date_default_timezone_set("Europe/Berlin");
1
php > echo date_default_timezone_get();
Europe/Berlin
php > echo date("Y/m/d H:i:s P");
2019/03/31 03:15:45 +00:00
php > exit
$ date
2019年 3月 31日 日曜日 12:19:06 JST

なお、Pythonでは問題なかった。

$ python

Python 2.7.14 (default, Jul 26 2018, 19:59:38)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from datetime import datetime
>>> datetime.now().strftime("%Y/%m/%d %H:%M:%S")
'2019/03/31 11:48:04'

$ python3

Python 3.7.2 (default, Feb 26 2019, 20:08:16)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> datetime.now().strftime("%Y/%m/%d %H:%M:%S")
'2019/03/31 11:52:45'

ChangeLogをパッと見た限りではタイムゾーンのバグらしきものは見当たらず。

https://www.php.net/ChangeLog-7.php#7.3.3

 


2:PHP 7.3.3にupdateしたら解決

とりあえずよく分からんので、PHP 7.3.3にアップデートしたら問題は解消した謎。

$ sudo yum update

アップデート後

$ php -v

PHP 7.3.3 (cli) (built: Apr 3 2019 18:43:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
$ date
2019 5 11 土曜日 19:26:26 JST
$ php -a
Interactive shell

php > echo date_default_timezone_get();
Asia/Tokyo
php > echo date("Y/m/d H:i:s");
2019/05/11 19:26:39
php >

問題なし。

いったい何だったんだろうか。