まず、タイムスタンプを受け入れる PHP 関数はタイムゾーンを受け入れません。UNIX のタイムスタンプはタイムゾーンを認識していないか、考慮していないためです。
入力すると、2012 年 9 月 3 日月曜日の 15:30:10 で、現在は夏時間 (「夏時間」) が適用されています。UTC タイム ゾーンでは、19:30:10 に相当します。いずれにせよ、これは UNIX タイムスタンプ (time_t
値) 1,346,700,610 です。地球の表面上の位置に応じて、その瞬間の現地時間は、9 月 3 日の午前 7 時 30 分 10 分から 9 月 4 日の午前 9 時 30 分 10 秒までの 26 時間の範囲内のどこかに収まる可能性があります (2012-09- 03T07:30:10-12:00 から 2012-09-04T09:30:10+14:00)。しかし、あなたの地元のレーベルが何であっても、問題の時間は UNIX と PHP に対して 1,346,700,610 です。
タイムゾーンに基づいて異なるtime_t
値を計算しようとしたようですが、計算されません。タイム ゾーン オフセットはtime_t
、変更されない値に適用されることはありません。それらは人間が読める表現にのみ適用されます。
可能な限り、独自のタイム ゾーン変換を試みないでください。ルールは変わる傾向にあります。現在、私の現地時間は UTC より 4 時間早いです。数か月後には 5 時間早くなります。さらに、その変更がいつ発生するかに関するルールは、今年は 5 年前とは異なります。そのため、変換しようとしている特定のタイム スタンプの値に応じて、さまざまなルールを適用する必要があります。
ライブラリ関数を使用します。
time_t
時間の文字列表現を値に変換するには、 を使用しますstrtotime
。文字列にタイム ゾーン参照が含まれている場合は、strtotime
が変換を行います。そうでない場合は、date_default_timezone_set
コニーが提案したように、を使用して、文字列を解釈するときに使用するタイムゾーンを PHP に伝えることができます。
値を文字列に変換するにはtime_t
、 を使用date
して「ローカル」時間 (つまり、 で設定されたタイム ゾーンに基づく時間date_default_timezone_set
。 でそのタイム ゾーンが何であるかを PHP に問い合わせることができますdate_default_timezone_get
) を取得するかgmdate
、UTC を取得します。