2011-12-03 26 views
7

PHP date() & time()復帰間違った時間:PHP間違った日付/時刻

date()によって返さdate.timezone = "Europe/Riga"時間は03-12-2011 08:57:12でしたが、システム時間が03-12-2011 01:57:12たとき(タイムゾーンヨーロッパ/リガ - その時点で正しい時刻)。 私は「ヨーロッパ/ロンドン」へのタイムゾーンを変更した場合、時間が03-12-2011 06:57:12に(実際の時間02-12-2011 23:57:12)に変更date/hwclock --showによって返さ

時間は(リガとして設定されたシステムのタイムゾーンを持つ03-12-2011 01:57:12)正しかった

OS:Debianの6.0

私はSO/Googleの同様の問題に関するほとんどの質問をチェックしましたが、すべてのタイムゾーンが間違っているようです。

私が知る限り、php - > osの間に問題があります。 もちろん、間違った時間オフセットは常に一定であるため、差を減算することはできますが、それは適切な解決策ではありません。

アイデアをお待ちしております。

+1

'date()'の値には何を使用していますか?例えば –

+1

はい - 'date( 'Ymd H:i:s')' – relic

+0

'DateTimeZone'と一緒に' DateTime'クラスを使って日付を判断するとどうなりますか? ?たとえば、 '$ d = new DateTime( ''、新しいDateTimeZone( 'Europe/Riga')); echo $ d-> format( 'Y-m-d H:i:s'); ' –

答えて

3

この問題は、自分のサーバーの1つで見たものに似ています。 bug in php 5.3.2-1のように見えます。バグレポートでphpスクリプトを実行し、結果を投稿してみてください。

+1

実際のバグではないようです。記者はデフォルトのタイムゾーンをリセットしていた他のコードを単純に持っていました。あなたがそれを見なければならないという意味では有効です。影響を与える可能性のあるコードと.iniの設定を知らせます。 – ficuscr

10

PHPマニュアルを読むと、date.timezoneの動作がphp.iniの設定の影響を受けるようです。 すべての日付/時刻関数でデフォルトのタイムゾーンを設定するもう1つの方法は、date_default_timezone_setです。代わりにあなたのdate.timezoneでコードの

date_default_timezone_set('Europe/Riga'); 

:でそれを設定してみてください。

+0

ありがとう。しかし、私はすでにそれを試して成功していない。タイムゾーンをRigaからLondonに変更したとき、時間差が2時間であったということは、タイムゾーンの選択が「機能する」ことを示唆していますが、問題は初期の時間値であるということです。 – relic

2

システムのタイムゾーンが間違っている可能性があります。この結果、php date.timezone(php.ini)とサーバーのシステム時刻の両方が正しいにもかかわらず、PHPのdate()関数によって与えられた時間がシフトします。

-4

PHP時間は、GMTとそれ以降のUTCを使用するエポックタイムスケールに基づいています。ほとんどの人は今、それをUNIX時間と呼んでいます。 PHPはUNIX時間を使用するため、タイムゾーンは使用されません。私は秒単位でタイムゾーンの時間を引くことが違いを調整する正しい方法だと思います。

+0

Unix時間は固定された瞬間からの単純なカウントです。タイムゾーンの影響を全く受けません。さらに、PHPにはかなりの時間帯の処理があります。それをスキップして自分のことを書く理由は絶対にありません。 –

-2

あなたはphp.iniでdate.timezoneで設定し、サーバー http://php.net/manual/en/timezones.php

+0

これは、彼が 'date.timezone =" Europe/Riga "と言ったときのOPの意味です。 –

1

を再起動する必要があり、私はあまりにもタイムゾーンといくつかの問題を抱えていました。これは誰かにとって便利なことです。

私のケースでは、チリSumer Time CLSTが誤ったtimzeoneオフセットを返しました。

を更新すると、timezonedbが働いてくれました。

移動先:https://pecl.php.net/package/timezonedb

Widnows用のDLLの最新バージョンをダウンロードし、 "EXT" ディレクトリにコピーします。 PHPを編集します。INIと線の下に置く:あなたが使用することができますLinuxのについては

拡張子= php_timezonedb.dll

PECL timezonedb

とphp.iniのプットをインストール:

拡張= php_timezonedb.so

関連する問題