【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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。