🕘
strtotime関数はUTCが返っている
サーバーのタイムゾーンが日本に設定されていて、日本の時刻しか扱わない場合は問題になりません。
date関数はタイムゾーンを自動的に計算してくれるからです。
日本以外の国の時刻も扱うサービスの場合は、UTC(GMT)で設計する必要があります。
UTC, GMT, UNIXタイム
UTC とは、協定世界時ともいい、1970年1月1日午前0時0分0秒からの秒数です。
UNIXタイム や GMT は UTC とほぼ一緒です。
date関数とgmdate関数の違い
date関数 は、サーバーに設定されているタイムゾーンを考慮した日時を返します。
gmdate関数 は、UTC時刻の日時を返します。
<?php
// サーバーに設定されているタイムゾーンを確認
echo date_default_timezone_get().PHP_EOL;
// 基準日
$timestamp = '01/Jan/2000:00:00:00 +0900';
echo $timestamp.PHP_EOL;
// 日時をunixタイム()
$time = strtotime($timestamp);
// 日時に変換して確認してみます
echo date('Y-m-d H:i:s', $time).PHP_EOL;
echo gmdate('Y-m-d H:i:s', $time).PHP_EOL;
// タイムゾーンを日本に変更します
if(!date_default_timezone_set('Asia/Tokyo') ){
echo 'Change the timezone is failed.'.PHP_EOL;
}
echo date('Y-m-d H:i:s', $time).PHP_EOL;
echo gmdate('Y-m-d H:i:s', $time).PHP_EOL;
オンラインで動作を確認
Discussion