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
で確認します。
1 2 3 4 |
#php -i | grep timezone Default timezone => Asia/Tokyo date.timezone => Asia/Tokyo => Asia/Tokyo |
php.ini で date.timezone = asia/tokyo
PHPでタイムゾーンを設定するには、php.ini を編集します。
php.ini はPHPの設定ファイルです。
/etc/php.ini を編集して、[Date]のところで、
date.timezone = "Asia/Tokyo"
と記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Asia/Tokyo" ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667 ; http://php.net/date.default-longitude ;date.default_longitude = 35.2333 ; http://php.net/date.sunrise-zenith ;date.sunrise_zenith = 90.583333 ; http://php.net/date.sunset-zenith ;date.sunset_zenith = 90.583333 |
この後、Apache等のWEBサーバーを再起動すれば、PHPのタイムゾーンが設定されています。
PHP タイムゾーン 一覧
PHPのタイムゾーンの一覧は次の通りです。
こんなPHPのコードでタイムゾーンとして設定可能な一覧を取得できます。
1 2 3 4 5 6 7 |
<?php $timezone_identifiers = DateTimeZone::listIdentifiers(); for ($i = 0; $i < count($timezone_identifiers); $i++) { printf("%s%s%s,\n", '"', $timezone_identifiers[$i], '"'); } ?> |
ただし、全部で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が反映されないことがあるようです。
以下にも反映されなかった場合の対策が書かれています。
確認する方法としては、以下の通りです。
1. php.inidで正しく以下の設定をしていますか?
date.timezone = "Asia/Tokyo"
2. php -i で設定を確認しましょう。
#php -i | grep timezone
date.timezone no value
date.timezoneを確認するには、phpinfo() を使います。
1 2 3 |
<?php phpinfo(); ?> |
phpinfo()で、表示した場合、「date.timezone」が「no value」になっているときは、タイムゾーンが正しく設定されていません。
date_default_timezone_set('asia/tokyo')
date_default_timezone_set() は、日付/時刻関数で 使用されるデフォルトタイムゾーンを設定します。
php timezone ini_set(date.timezone)
ini_set( 'date.timezone', 'Asia/Tokyo' );
も date_default_timezone_set() と同様にタイムゾーンを設定します。
コメント
[…] […]