PHPではプログラムの動作設定や、タイムゾーンなどの環境設定をすることができます。
この記事では、
・タイムゾーンとは
・タイムゾーンの種類
・php.iniでタイムゾーンを設定する方法
という基本的な内容から、
・timezone関連のWarningやErrorが発生した場合
・date_default_timezone_set関数で設定する方法
などの、より詳細な内容についても解説していきます。
今回はそんなtimezoneについて、わかりやすく解説します!
タイムゾーン(timezone)とは
タイムゾーンとは、同じ標準時刻を使用する地域や区分のことを指します。
インターネットに接続されているコンピューターは世界中にあるため、それぞれの地域が異なるタイムゾーンを使用すると、システムや通信に影響を及ぼしてしまいます。
そのため、コンピューターやプログラムで管理している時刻を同じタイムゾーンに合わせる必要があります。
ちなみに世界共通で使用されている時刻はUTC(協定世界時)と呼ばれ、日本の標準時(JST)より9時間進んでいるため、「UTC+09:00」と表示されます。
そんなタイムゾーンですが、PHPでは設定ファイル(php.ini)からさまざまな地域のタイムゾーンを指定することが可能です。
タイムゾーンの種類
PHPではさまざまな地域のタイムゾーンがサポートされています。
PHPでサポートされているタイムゾーンを確認するには、DateTimeZoneクラスのlistIdentifiers()メソッドを使用すると便利です。
サンプルプログラム
//タイムゾーンの一覧を取得する $timezone_list = DateTimeZone::listIdentifiers(); foreach($timezone_list as $val){ echo $val.'<br>'; }
実行結果:
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Bamako …省略…
listIdentifiersの結果は配列で返すのでforeach文で要素ごとに表示していけば、一覧で表示されます。
次項よりPHPのタイムゾーンの設定方法について、詳しく解説していきます。
タイムゾーンの設定方法(php.ini)
PHP.iniのtimezoneを設定する
PHPではプログラムが動作する環境を詳細に設定できる「php.ini」があります。
php.iniは、使用している環境によって格納場所が異なります。
格納場所を確認する簡単な方法は、phpのソースファイルに以下を記述して、ブラウザ上で実行すればphpinfoの画面が表示されます。
<?php phpinfo(); ?>
phpinfoの画面が表示されたら、「Configuration File (php.ini) Path」の項目を確認するとphp.iniの格納場所が記載されています。
php.iniからタイムゾーンを設定するには、
カテゴリ[Date]の中にdate.timzoneの項目がありますので、設定値を “Asia/Tokyo”に変更します。
なお、php.iniを編集する場合は必ずファイルのバックアップを取得してから、編集を実施してください。
<変更前>
[Date] ; Defines the default timezone used by the date functions ; Will be changed by MAMP to system timezone date.timezone = "Europe/Berlin"
<変更後>
[Date] ; Defines the default timezone used by the date functions ; Will be changed by MAMP to system timezone date.timezone = “Asia/Tokyo”
php.iniを編集したら設定を反映するために、使用しているWebサーバを再起動します。
設定したタイムゾーンが反映されているか、確認するためには「PHPの設定ファイル」で説明したphpinfoの画面より「date.timezone」の項目から値を確認することができます。
現在時刻を確認する方法
設定したタイムゾーンでの現在時刻が取得できるか、確認するためにはdate関数を使用します。
dateの引数に出力するフォーマットを指定すれば、指定したフォーマットで日時が出力されます。
echo date("Y/m/d H:i:s");
2017/09/21 09:55:58
使用している環境によっては、現在時刻が9時間ずれてしまう問題があります。
もし、時間がずれていたら応急処置としてstrtotimeを使用して、以下のように時刻の差分を設定する方法もあります。
echo date("Y/m/d H:i:s", strtotime('+9hour'));
日付のフォーマット指定については、以下の記事でも詳しく解説しています!
WarningやErrorが発生した場合
PHPのログファイル(php_error.log)を確認すると、稀に以下のようなログが出力されていることがあります。
PHP Warning: date(): It is not safe to rely on the system’s timezone settings. You are required 〜
このような警告メッセージが出力されている場合、php.iniの設定が正しくされていない可能性がありますので、設定ファイルの見直しや、前述したphpinfoの画面からタイムゾーンの設定を確認してみましょう。
以下のようにdate.timezoneが“no value”となっている場合はタイムゾーンが正しく設定されていません。
関数を使用したタイムゾーンの設定
date_default_timezone_set関数
タイムゾーンは、php.iniファイル以外にも、date_default_timezone_set関数を使用して設定することも可能です。
以下に、date_default_timezone_set関数でタイムゾーンを設定する方法を紹介します。
サンプルプログラム
//アメリカに設定 date_default_timezone_set('America/Adak'); print date('Y/m/d G:i:s'); echo "<br>"; //南極に設定 date_default_timezone_set('Antarctica/Casey'); print date('Y/m/d G:i:s'); echo "<br>"; //大西洋に設定 date_default_timezone_set('Atlantic/Azores'); print date('Y/m/d G:i:s');
実行結果:
2017/09/21 0:58:53 2017/09/21 20:58:53 2017/09/21 9:58:53
date_default_timezone_set関数については、以下の記事でも詳しく解説していますので、ぜひ参考にしてください!
時刻を扱うdate関数について
日付を扱うdate関数については、以下の記事で詳しくまとめていますのでぜひ参考にしてくださいね!
主な内容として、
・date関数とは
・date関数の基本的な使い方
・strtotime関数の基本的な使い方
・日付のフォーマットを指定する方法
・タイムゾーンの指定方法
・日付を比較する方法
・曜日を取得する方法
などを解説しています!
まとめ
ここではPHPのタイムゾーン(timezone)について、
・タイムゾーンとは
・タイムゾーンの種類
・php.iniでタイムゾーンを設定する方法
・WarningやErrorが発生した場合
・date_default_timezone_set関数で設定する方法
などについて解説しました。
PHPで開発するWebサービスは、多くの場合時刻を管理していますので、タイムゾーンの設定についてはしっかりと覚えておきましょう。
もし、タイムゾーンの設定方法を忘れてしまったら、この記事を思い出してくださいね!