16

MySQL データベースに挿入する前に、PHP を使用して日付と時刻をタイムスタンプに変換しています。

私の問題は、PHP の strtotime 関数を使用すると、出力タイムスタンプが実際の時間から 1 時間遅れることです。

たとえば、今日の日付が 07/21/2010 であるとします。次のようなphpコードを使用する場合:

<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>

返されるタイムスタンプは、GMT 相当の MINUS 1 時間です。つまり、2010 年 7 月 21 日 00:00:00 GMT ではなく、2010 年 7 月 20 日 23:00:00 GMT に戻ります。

私は英国に住んでいるので、タイムゾーンは GMT です。date_default_timezone_set('Europe/London') を使用してスクリプトでタイムゾーンを宣言し、php.ini ファイルが 'Europe/London' に設定されていることも確認しました。

これはおそらくサマータイムと関係がありますか?すべての日付に 1 時間を追加せずに問題を解決するにはどうすればよいですか?

4

3 に答える 3

29

ヨーロッパ/ロンドン時間は、サマータイム中は GMT 時間ではありません。UTC に設定する必要があります。

date_default_timezone_set('UTC');

date_default_timezone_set('GMT');動作する可能性がありますが、以下のコメントでケネスが指摘しているように、非推奨です。

于 2010-07-21T21:26:22.260 に答える
1

ロンドンのタイム ゾーンは、夏の間は英国夏時間で表されます。そうは言っても、時間を UTC で保存し、UTC または現地時間でエンド ユーザーに時間を提示することをお勧めします。

また、システム時刻が UTC であることを確認することもおそらく賢明です。

于 2010-07-21T22:29:14.200 に答える
-9

PHP 5.3 より前では、strtotime月や日などを加算または減算した場合に時間を計算する際に問題がありました。これは修正されたため、PHP 5.3 未満の場合は具体的にどのように計算するかを伝えることができます。mysql で日付を計算するか、アップグレードすることをお勧めします。あなたのPHPバージョン。

于 2010-07-21T21:26:52.010 に答える