0

現在、10 の異なるタイム ゾーンの現地時間を表示しようとしていますが、問題の解決策が見つかりません。

私はこのコードを使用しています:

$timezone = +12;
echo gmdate("Y/m/j H:i:s<br />", time() + 3600*($timezone + date('I'))); 

は現地$timezone時間で、タイム ゾーンに応じて+、 、または none です。-私の問題は、一部の国にはサマータイムがあることです。このコードでこれを考慮して、夏時間/冬時間も計算するにはどうすればよいですか?

4

2 に答える 2

2

前述のように、PHP の時刻関数と日付関数を使用する必要がありますが、PHP の日付/時刻データが最新であることが重要です。

ただし、PHP は Olson DB (時刻と日付の記録に使用) ほど頻繁に更新されないため、PHP のタイム ゾーン変換を使用するだけでは、DST 情報が古くなり、データの正確性に影響を与える可能性があります。これは頻繁に発生するとは予想されていませんが、発生する可能性があり、世界中に多数のユーザーがいる場合は発生する可能性があります。

上記の問題に対処するために、PHP の TimeZone データを更新するpecl パッケージがあります。このパッケージは更新されるのと同じくらい頻繁にインストールしてください。

于 2013-06-19T08:06:39.627 に答える
2

このような「手動」の日付計算を行うべきではありません.PHPにはそのための非常に優れた関数があります. タイムゾーンの計算にはDateTimeZoneを使用します。

解決

何を達成したいのか完全にはわかりませんが、次のようにタイムゾーンを変換できます。

$fromTz = new DateTimeZone('GMT');
$toTz   = new DateTimeZone('Pacific/Midway');
$dt     = new DateTime('now', $fromTz);
$dt->setTimezone($toTz);
echo $dt->format('Y/m/j H:i:s');

バックグラウンド

タイムゾーンの計算は、特にお気づきのように、夏時間 (DST) と組み合わせると非常に複雑になる可能性があります。また、数年ごとに国のタイムゾーンなどが変更されます。地球の自転と正確に一致するように UTC にも適用される時刻修正についても忘れてはなりません。

PHP が使用するタイムゾーン データには、これらすべての変更の記録があり、タイムゾーンの計算を正確に適用できます。これは、独自のコードを作成するときに期待できる以上のものです。

タイムスタンプを使用して時間計算を行うべきではない理由の詳細については、時間処理に関する私のブログ投稿をお読みください。

于 2013-06-19T07:53:38.863 に答える