PHP php.iniでタイムゾーン (date.timezone) を設定する方法

PHP
スポンサーリンク

PHP php.iniでタイムゾーン (date.timezone) を設定する方法をまとめました。

スポンサーリンク

We selected the timezone 'utc' for now, but please set date.timezone to select your timezone.

PHPのプログラムで、Smartyというテンプレートエンジンから、日付を設定しようとすると、strftime() 関数が呼ばれるようです。

この strftime() 関数が以下の警告を表示しました。

 

Warning : strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/php_libs/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 234

 

んんん?

 

どうやら、PHPのタイムゾーンの設定が、デフォルトのままの設定なので正しく自分の地域のタイムゾーンを設定するように警告が出たようです。

PHP タイムゾーン 取得、確認

PHPでタイムゾーンを確認するには、php -i コマンドを使うとよいでしょう。

#php -i | grep timezone

で確認します。

 

php.ini で date.timezone = asia/tokyo

PHPでタイムゾーンを設定するには、php.ini を編集します。

php.ini はPHPの設定ファイルです。

 

/etc/php.ini を編集して、[Date]のところで、

date.timezone = "Asia/Tokyo"

と記述します。

 

この後、Apache等のWEBサーバーを再起動すれば、PHPのタイムゾーンが設定されています。

 

PHP タイムゾーン 一覧

PHPのタイムゾーンの一覧は次の通りです。

PHP: サポートされるタイムゾーンのリスト - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

 

こんなPHPのコードでタイムゾーンとして設定可能な一覧を取得できます。

ただし、全部で400個ぐらいあります。

 

ちなみに、アジアだけでもこれだけありますが、日本で使う場合、Asia/Tokyoを設定すればほとんどの場合問題ないと思います。

Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr
Asia/Aqtau Asia/Aqtobe Asia/Ashgabat Asia/Atyrau
Asia/Baghdad Asia/Bahrain Asia/Baku Asia/Bangkok
Asia/Barnaul Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Chita Asia/Choibalsan Asia/Colombo Asia/Damascus
Asia/Dhaka Asia/Dili Asia/Dubai Asia/Dushanbe
Asia/Famagusta Asia/Gaza Asia/Hebron Asia/Ho_Chi_Minh
Asia/Hong_Kong Asia/Hovd Asia/Irkutsk Asia/Jakarta
Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka
Asia/Karachi Asia/Kathmandu Asia/Khandyga Asia/Kolkata
Asia/Krasnoyarsk Asia/Kuala_Lumpur Asia/Kuching Asia/Kuwait
Asia/Macau Asia/Magadan Asia/Makassar Asia/Manila
Asia/Muscat Asia/Nicosia Asia/Novokuznetsk Asia/Novosibirsk
Asia/Omsk Asia/Oral Asia/Phnom_Penh Asia/Pontianak
Asia/Pyongyang Asia/Qatar Asia/Qyzylorda Asia/Riyadh
Asia/Sakhalin Asia/Samarkand Asia/Seoul Asia/Shanghai
Asia/Singapore Asia/Srednekolymsk Asia/Taipei Asia/Tashkent
Asia/Tbilisi Asia/Tehran Asia/Thimphu Asia/Tokyo
Asia/Tomsk Asia/Ulaanbaatar Asia/Urumqi Asia/Ust-Nera
Asia/Vientiane Asia/Vladivostok Asia/Yakutsk Asia/Yangon
Asia/Yekaterinburg Asia/Yerevan

 

php.ini timezone 反映されない

phpi.ini を設定してもtimezoneが反映されないことがあるようです。

以下にも反映されなかった場合の対策が書かれています。

PHPでdate.timezoneを設定したのに反映されない時の対処法メモ(Macユーザー向け) - Qiita
事象タイトルの通りです。環境MacBook Pro (Retina, 13-inch, Mid 2014)MacOS Sierra 10.12PHP 5.5.38Apache 2.4.23…

 

確認する方法としては、以下の通りです。

 

1. php.inidで正しく以下の設定をしていますか?

date.timezone = "Asia/Tokyo"

 

2.  php -i で設定を確認しましょう。

#php -i | grep timezone

date.timezone no value

date.timezoneを確認するには、phpinfo() を使います。

phpinfo()で、表示した場合、「date.timezone」が「no value」になっているときは、タイムゾーンが正しく設定されていません。

 

date_default_timezone_set('asia/tokyo')

date_default_timezone_set() は、日付/時刻関数で 使用されるデフォルトタイムゾーンを設定します。

PHP: date_default_timezone_set - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

 

php timezone ini_set(date.timezone)

ini_set( 'date.timezone', 'Asia/Tokyo' );

も date_default_timezone_set() と同様にタイムゾーンを設定します。

PHP: ini_set - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.