概要
- 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 >
問題なし。
いったい何だったんだろうか。