1

アプリケーションを開発するためにphpとmysqlを使用しています。このアプリケーションでは、選択したタイムゾーンに従ってユーザーにデータを表示したいため、時間が重要な役割を果たします。このために、時間を数値形式に変換するために strtotime を使用していますが、strtotime がすべてのタイムゾーンで同じ値を返すことに気付きました。テストするために次のコードを書きました。

date_default_timezone_set("Asia/Kolkata");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"))."<br/><br/>";
date_default_timezone_set("America/New_York");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"));

しかし、出力は

2013-01-28 15:40:11 ------ 1359367811

2013-01-28 05:10:11 ------ 1359367811

戻り値が同じなのはなぜですか?

4

3 に答える 3

3

strtotime()「 1970 年 1 月 1 日 00:00:00 UTCからの秒数」を返します

于 2013-01-28T10:24:53.807 に答える
1

@Bobby のコメントにあるように、「Unix タイムスタンプは常に UTC です」。これは、本質的に、UTC タイムゾーンに対して 2 つの同等の変換を行っていることを意味します。

1タイムゾーンのt 1タイムスタンプと 2の同じ t 1タイムスタンプは、タイムゾーン a 3に変換されると同じ結果になると考えてください。あなたの例では、「同じ結果」は数秒ですが、原則は同じです。

つまり、コードでは、一見 2 つの異なる日付から 2 つの UNIX タイムスタンプを生成しています。しかし、実際に行っているのは、同じ時点の 2 つの異なるが同等の表現 (アジアとアメリカのタイムゾーン) を生成することです。次に、2 つの同等の表現を同じ第 3 の表現 (UTC タイムゾーン) に変換します。

于 2013-01-28T10:26:13.477 に答える
0

のPHPマニュアルによるとstrtotime

The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.

前述のように、strtotime は、指定された日付形式を Unix タイムスタンプに変換します。これは、Unix エポックを基準にして計算されます。エポックは、定義がユーザーのタイムゾーンに依存しない固定ポイントであり、それ以降の秒数は、すべてのタイムゾーンで相対的に同じです。

タイムゾーンの設定は、タイムスタンプ値の解釈に影響するだけです。

于 2013-08-14T06:28:10.647 に答える