3

(残念ながら)DSTであるかどうかに応じて、+3600または+7200のいずれかの特定のタイムゾーンにあるデータベースからのUnixタイムスタンプがあります。これはこれまで問題にならなかったが、私たちのWebサイトは現在、より多くの国際的な視聴者に移動しており、Javascriptと上記のタイムスタンプとの相互作用のため、オフセットなしでタイムスタンプを変換する必要があります。

では、Unixタイムスタンプだけを指定して、そのタイムスタンプの時点でタイムゾーンのオフセットを取得するにはどうすればよいでしょうか。PHPのドキュメントを調べていますが、日付/時刻関数が非常に多く、少し迷っています。

PHP5.2.3を使用しています

4

5 に答える 5

4

自分の質問に答えるのはばかげていると思いますが、gmstrftime機能を見つけたばかりです。それは私が望んでいることを正確に実行しているようです。みんなありがとう!

于 2009-10-08T09:45:23.533 に答える
2

一般的なケースではそれを行うことはできません。Unixタイムスタンプは、Unixエポックからの秒数であり、タイムスタンプ情報は含まれていません。

DSTが有効な時間帯に特定のタイムスタンプが発生するかどうかを判断し、それに応じて調整することが効果的です。ただし、このアプローチは境界を越えて失敗します(DSTの開始直後と終了直前の1時間のタイムスタンプごとに2つの意味があるため)。

将来的には、この種の問題を正確に回避するために、タイムスタンプをUTCで保存することをお勧めします。

于 2009-10-08T09:36:24.590 に答える
2

UNIXタイムスタンプがUNIX時間(エポックからの秒数)を意味する場合、オフセットは常に0です。エポックは1970年1月1日の00:00:00UTCとして定義されます。オフセット0のUTCに注意してください。

タイムゾーンオフセットとdstの適用は、UNIXタイムスタンプを日付/時刻構造に変換するライブラリによって処理されます。(phpはわかりませんが、Cでは、localtime関数はUNIXタイムスタンプを取得し、環境または/ etc / localtimeファイルからタイムゾーン情報を適用し、秒、分、時間などの構造体を吐き出します。 )。

于 2009-10-08T09:44:33.140 に答える
1

Uはこれを使用できます:

$timezone_offset = date('O');

差をグリニッジ標準時(GMT)に時間単位で返します。

[ソース]

于 2011-03-03T13:22:54.007 に答える
0

これでうまくいくでしょうか?

$tz = date("O", $time);

次のこともできます。

ここから:

http://www.php.net/manual/en/function.date.php

于 2009-10-08T09:36:11.247 に答える