PHPプログラミング

レシピ

日付・時間の扱い

タイムゾーンを取得 / 設定する

タイムゾーンをphp.iniではなく、コードレベルで設定確認&設定する方法を解説します。

この記事のポイント

  • 環境設定ではなくコードレベルでタイムゾーンを設定する
  • 現在のタイムゾーンを取得する

目次

時間の取り扱いにおいて重要なタイムゾーン

システム開発において時刻の取り扱いは必須ですが、そこで重要になるのがタイムゾーン。
タイムゾーンの標準設定が世界協定時(UTC)であることが多いため、「時刻を取得してみたら日本時間とずれていた」というケースがあります。
そこで、今回はタイムゾーンの設定について解説していきます。

  • タイムゾーンを設定したい
  • 設定されているタイムゾーンを知りたい
  • php.iniの設定は編集できないから、コードレベルでタイムゾーンを設定したい

なお、コードからではなく「php.ini」で設定する方法もあります。
もしこちらの設定ファイルを編集することが可能であれば、「php.iniで標準タイムゾーンを設定する」で紹介している方法でも同じ設定ができます。

今回のようにコードで設定する方法は、大元となるサーバー自体の設定を変更する訳ではなく、コードを実行するシステムのみへの一時的な変更です。
そのため、同じサーバーで他のシステムが動いていても影響しないというメリットはありますが、逆に言うとシステムごとにタイムゾーンを設定する必要があることを意味します。
サーバーで動いている全てのシステムに同じタイムゾーンを設定したい場合は、php.iniやサーバーのタイムゾーン自体を変更する方法をオススメします。

設定されているタイムゾーンを知る

いま設定されているタイムゾーンは、date_default_timezone_get関数から取得することができます。

今回は仮に、「2017年08月25日の16:30:00」に実行しているとします。

コード例

<?php

echo date_default_timezone_get();	// UTC
echo date("Y-m-d H:i:s");	// 2017-08-25 07:30:00

上記のコードでは、現在のタイムゾーンと、そのタイムゾーンでの現時刻を取得しています。

タイムゾーンを設定する

タイムゾーンの設定は、date_default_timezone_set関数から行います。

先ほどのコードに設定する関数を追加し、その後に改めてタイムゾーンと現時刻を取得してみます。
赤い箇所が追加したコードです。

コード例

<?php

echo date_default_timezone_get();	// UTC
echo date("Y-m-d H:i:s");	// 2017-08-25 07:30:00

// タイムゾーンを設定
date_default_timezone_set('Asia/Tokyo');

echo date_default_timezone_get();	// Asia/Tokyo
echo date("Y-m-d H:i:s");	// 2017-08-25 16:30:00

date_default_timezone_set関数を実行する前と後では、出力される内容が違うことが分かります。
実行する前はUTCの時刻が、実行した後では日本の時刻が出力されています。

したがって、date_default_timezone_set関数の実行後は指定したタイムゾーン(日本時間)であることを前提に、時刻を扱うことができるようになります。
しかしこれは単一のページでの話しなので、ページ遷移したら設定は標準設定に戻ります

もちろん日本以外にも、世界中の様々なタイムゾーンを指定することができます。
指定できるタイムゾーンについて詳しくはphp.netの下記のページを参照してください。
サポートされるタイムゾーンのリスト – php.net

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。