スライドショー

【PHP入門】timezoneの設定方法をわかりやすく解説!

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の格納場所が記載されています。

phpini

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」の項目から値を確認することができます。

datetimezone

現在時刻を確認する方法

設定したタイムゾーンでの現在時刻が取得できるか、確認するためには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'));

日付のフォーマット指定については、以下の記事でも詳しく解説しています!

【PHP】DateTimeでの日時取得とフォーマット方法まとめ
更新日 : 2018年5月15日

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”となっている場合はタイムゾーンが正しく設定されていません。

novalue

関数を使用したタイムゾーンの設定

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プログラマが伝授!date関数で日時を自由に扱おう
更新日 : 2019年4月11日

まとめ

ここではPHPのタイムゾーン(timezone)について、

・タイムゾーンとは
・タイムゾーンの種類
・php.iniでタイムゾーンを設定する方法
・WarningやErrorが発生した場合
・date_default_timezone_set関数で設定する方法

などについて解説しました。

PHPで開発するWebサービスは、多くの場合時刻を管理していますので、タイムゾーンの設定についてはしっかりと覚えておきましょう。

もし、タイムゾーンの設定方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説