もっと詳しく

取得時間がずれる

以下のソースで現在の日時を取得すると、9時間前の時間が表示されることがありました。これを修正する方法をメモ。

date( "Y/m/d (D) H:i:s", time() )

上記を実行した結果↓ これが9時間前の時間だったらこのページを公開しているレンタルサーバーのタイムゾーンがずれていることになります。

取得した現在日時

現在のデフォルトタイムゾーンは以下のコードで取得できます。これで結果が「Asia/Tokyo」ではなく、「UTC」と返ってきた場合はタイムゾーンが設定されていないことになり、日本(東京)はUTC(協定世界時)から+9時間の地域なので、タイムゾーンが設定されていないため-9時間のズレを発生させている原因になっていると思います。

echo date_default_timezone_get();
取得したデフォルトタイムゾーン

タイムゾーンの設定方法

php.iniを設定できるとき

WEBサーバのphp.iniを編集することができるときは、date.timezoneの設定を以下のようにします。

date.timezone = Asia/Tokyo

PHPのコード上で設定したいとき

レンタルサーバーの制限でphp.iniを編集できない場合は、PHPのソースに以下のコードを入れてやればOKです。

date_default_timezone_set('Asia/Tokyo');

設定のサンプルソース

例1

デフォルトタイムゾーンがAsia/Tokyoではないときにdate_default_timezone_set('Asia/Tokyo');を実行。

if(strcmp( date_default_timezone_get(), 'Asia/Tokyo' )) {
    date_default_timezone_set('Asia/Tokyo');
}
echo date("Y-m-d H:i:s");

例2

例1と同じでIF文だけで書く方法。

if(date_default_timezone_get() != "Asia/Tokyo"){
    date_default_timezone_set("Asia/Tokyo");
}
echo date("Y-m-d H:i:s");

例3

デフォルトタイムゾーンとphp.iniのdate.timezoneをstrcmpで比較して一致しないときはdate_default_timezone_set('Asia/Tokyo');を実行。

if(strcmp( date_default_timezone_get(), ini_get('date.timezone')) ) {
    date_default_timezone_set('Asia/Tokyo');
}
echo date("Y-m-d H:i:s");

無理やり加算する方法

上記のタイムゾーンの設定を行ってもずれる場合は、取得時間に9時間を加算する方法もあります。しかし、これはレンタルサーバーの設定が変わって正しい日時が表示されるようになった場合にも加算して、今度は9時間先の日時を表示することになるので、賢いやり方ではありません。

$now_date = date('Y-m-d H:i:s', strtotime('+9hour'));