echo strtotime('2010-09-11 12:15:01');
戻り値: 1284207301
SELECT UNIX_TIMESTAMP('2010-09-11 12:15:01')
戻り値: 1284200101
違いはなぜですか?
echo strtotime('2010-09-11 12:15:01');
戻り値: 1284207301
SELECT UNIX_TIMESTAMP('2010-09-11 12:15:01')
戻り値: 1284200101
違いはなぜですか?
答えは、strtotime に関する php.net の記事にあります。
この関数は、TZ 環境変数 (使用可能な場合) を使用してタイムスタンプを計算します。PHP 5.1.0 以降、すべての日付/時刻関数で使用されるタイムゾーンを定義する簡単な方法があります。そのプロセスは、date_default_timezone_get() 関数のページで説明されています。
短いバージョン: strtotime はデフォルトでタイムゾーンを使用しますが、UNIX_TIMESTAMP は使用しません。
これは通常、PHP と MySQL が異なるタイムゾーンを使用するように設定されていることと、それらが異なるサーバーにある場合にシステム時刻が一致しないことが原因です。
UNIX タイムスタンプは、1970 年 1 月 1 日の午前 0 時 (UTC) の UNIX エポックから経過した秒数であるため、タイムゾーンの違いによってタイムスタンプが異なります。
1284207301-1284200101 = 7200
→2時間。このような完全に丸められた違いは、バグによるものではなく、タイムゾーンの違いです。ほとんどの場合、1 つは UTC/GMT で、もう 1 つは UTC +/- 2 です。
私の推測では、Unix 時間は GMT であり、もう一方はローカル タイムゾーンです。2 つの出力の間には正確に 2 時間の差 (7200/60/60) があります。