インターネット上で開くことができるサイトは基本的に全世界からアクセスすることができます。
全世界からアクセスできることは便利ですが、そうなってくると地域によって時差が生じて、同時にアクセスしても時間がバラバラになってしまうのが問題。
今回はタイムゾーン関係の確認などが可能なPHPのdatetimezoneクラスに関してご紹介します。
datetimezoneクラスの機能について知りたい方は、この記事を参考にしてくださいね。
目次
PHPのdatetimezoneクラスはタイムゾーンに関係するクラス
日本を含め世界各国では、地域や区分ごとに同じ標準時刻を使用するタイムゾーンというものが存在しています。
日本の場合は兵庫県明石市の時間が標準時刻になっていますが、大体の場合はAsia/Tokyoといった表記になっています。
PHPのdatetimezoneクラスは各国のタイムゾーンを表示させるなど、タイムゾーンに関連したクラスです。
datetimezoneクラスでタイムゾーン一覧を表示
PHPは日本だけでなく様々な国で扱われているプログラムだけあって、色々な国のタイムゾーンがサポートされています。
どの国のタイムゾーンがサポートされているかは、datetimezoneクラス内のlistdentifiers()を使うことで確認できます。
以下のようなプログラムで一覧を取得できます。
1 2 3 4 5 6 7 8 |
// listdentifiers()でタイムゾーン一覧を取得 $timezone_list = DateTimeZone::listdentifiers(); // foreachでリストの最後まで見る foreach($timezone_list as $val){ // 行の最後に改行タグを挿れて表示 echo $val.' '; } |
上記を実行すると以下のようにサポートしているタイムゾーンが一覧で表示されます。
1 2 3 4 5 |
1. Africa/Abidjan 2. Africa/Accra 3. Africa/Addis_Ababa 4. Africa/Algiers 5. etc... |
listdentifiers()の中身は配列になっているので、foreachで配列の中身を一行目から順番に最後までループで見ていくプログラムになっています。
PHPでタイムゾーンを設定するにはphp.iniを設定する
datetimezoneクラスでは前項のようにタイムゾーン一覧の取得などはできますが、PHPに設定されているタイムゾーンそのものをいじることはできません。
PHPにはプログラムの動作環境を詳細に設定可能な「php.ini」ファイルが存在しており、そこからタイムゾーンの確認も可能です。
ここからはphp.iniをつかったタイムゾーン設定の変更やdata関数を使ったタイムゾーンの確認などをご紹介します。
PHPでphp.iniの位置を確認しタイムゾーンの設定を変更
タイムゾーンなどを設定できるphp.iniは、使用している環境で格納場所が違っています。
php.iniを探す方法は簡単で、まずは以下のプログラムを実行します。
1 |
phpinfo(); |
これを実行して表示されるphpinfo画面内の「Configuration File(php.ini)Path」の項目に、php.iniファイルの格納場所が表示されています。
格納先のphp.iniを開きカテゴリ[Date]内にあるdate.timezone項目を「Asia/Tokyo」にすれば、日本のタイムゾーンになります。
変更後に実行したらプログラムがおかしくなるといったこともあるので、変更前に必ずバックアップはとっておいてくださいね。
PHPでdate関数を使い設定したタイムゾーンの現在時刻を確認
タイムゾーンの設定をしたらちゃんと設定したタイムゾーンの時刻が取得できるか、確認したいですよね。
PHP内でdate関数を使えば確認することができます。
以下のようなプログラムで出力フォーマットを指定すれば、設定したタイムゾーンでの日時と時刻を表示してくれます。
1 |
echo date('Y/m/d H:i:s'); |
上記のような()内で指定したフォーマットであれば、実行した際以下のように表示されます。
1 |
2021/02/17 22:41:34 |
自身が現在いる地域のタイムゾーンに設定しているのなら、現在の日時・時刻になっていれば成功です。
使用している環境によっては時間がずれてしまっている場合があります。
その場合は応急処置で以下のようにstrtotimeを使って、時間の調整をすることができます。
1 |
echo date('Y/m/d H:i:s', strtotime('+9hour')); |
ずれてる時間分指定して調節できますが、あくまで応急処置なので、ずれている原因を調べて大本を直すようにしてくださいね。
エラーが見つかったらタイムゾーン設定を確認する
php.iniをいじった際設定が正しくないと、PHPのログファイルであるphp_error.logに以下のような警告メッセージが表示されることがあります。
設定ファルを見直したりphpinfo画面からタイムゾーン設定の確認をしてみましょう。
phpinfo画面内の「date.timezone」項目が「no value」と表示されている場合は、タイムゾーン設定が正しくされていないです。
【初心者必見】WordPressでよく起こるエラーやトラブルの対処法
date_default_timezone_set関数でもタイムゾーン設定が可能
ここまでphpの設定ファイルであるphp.iniを弄ってタイムゾーンを設定する方法を紹介しましたが、もう一つphp内で関数を使って設定する方法もあります。
date_default_timezone_set関数という関数で、以下のような記述で設定したタイムゾーンの確認まで可能です。
1 2 3 4 |
// タイムゾーンを日本に設定 date_default_timezone_set('Asia/Tokyo'); // date関数でフォーマットを指定しつつ時刻を表示 print date('Y/m/d G:i:s'); |
date_default_timezone_set関数でタイムゾーンの設定をし、その下でdate関数でフォーマットを指定しつつprint関数で表示させることで、同時に確認ができます。
date_default_timezone_setの()内を「America/Adak」にすればアメリカのタイムゾーンになりますし、「Antarctica/Casey」にすれば南極になります。
サポートされているタイムゾーン以外はエラーになるので、しっかりサポートされているタイムゾーンから選ぶことが大事です。
まとめ
今回はPHPでのdatetimezoneについてご紹介しました。datetimezoneはPHP内のタイムゾーンについて確認することができるクラスです。
またタイムゾーンの設定方法についてPHP.iniをいじる方法とdate_default_timezone_set関数で設定する方法の2種類を紹介しました。
どちらも難しくはないので、好きな方でタイムゾーンを設定してみてくださいね。