🕘

strtotime関数はUTCが返っている

2022/03/29に公開

サーバーのタイムゾーンが日本に設定されていて、日本の時刻しか扱わない場合は問題になりません。
date関数はタイムゾーンを自動的に計算してくれるからです。

日本以外の国の時刻も扱うサービスの場合は、UTC(GMT)で設計する必要があります。

UTC, GMT, UNIXタイム

UTC とは、協定世界時ともいい、1970年1月1日午前0時0分0秒からの秒数です。

UNIXタイムGMTUTC とほぼ一緒です。

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;

オンラインで動作を確認
https://paiza.io/projects/hgUyHc-fSEYZQZsJAHZxyg

Discussion