1

PHP の gmstrftime() 関数に問題があります。見てください:

<?
$ts[]=1348573985; // '2012-09-25 13:53:05' (date returned from mysql's from_unixtime() function)
$ts[]=1233958620; // '2009-02-06 23:17:00' (date returned from mysql's from_unixtime() function)

foreach($ts as $t) {
    echo $t." => ".gmstrftime( "%d %B %Y - %H:%M", $t )."\n";
}
?>

出力は次のようになります。

1348573985 => 25 September 2012 - 11:53
1233958620 => 06 February 2009 - 22:17

ご覧のとおり、最初のタイムスタンプは (mysql の出力から) 2 時間ずれていますが、これはタイムゾーン設定のため正常です。しかし、2 つ目は 1 時間しかずれていませんが、2 つの gmstrftime() 呼び出しの間でタイムゾーンを変更していませんか??

これは PHP の gmstrftime() 関数のバグですか、それとも何か他のバグですか?

4

1 に答える 1

2

のマニュアルgmstrftimeから:

返される時間がグリニッジ標準時 (GMT) であることを除いて、strftime() と同じように動作します。

グリニッジ標準時は一年中同じです。これは、冬に GMT として設定される英国の現地時間とは異なりますが、夏には「英国夏時間」 (GMT+1、つまり GMT の 1 時間前) になります。同じことが西ヨーロッパでも起こり、冬は GMT+1 ですが、夏は GMT+2 です。

MySQL データベースはおそらくヨーロッパの現地時間に合わせて構成されているため、夏の間に発生する Unix タイムスタンプを変換すると、夏時間の調整に合わせて 1 時間余分に追加されます。

私の意見では、最善のポリシーは、すべてのシステムで「UTC」(基本的には GMT と同じ) を使用するように設定し、「直前に」ローカル タイムゾーンに変換することです。他のタイムゾーンで標準化することもできますが、UTC はデバッグの適切なベースラインとして機能します。

于 2012-09-25T12:16:09.823 に答える