0

以下のコードから返されたUNIXタイムスタンプが2012年8月31日金曜日06:26:00GMTとして表示される理由を私は一生理解できません。私は自分のサーバーとhttp://www.onlineconversion.com/unix_time.htmでこれをテストしました。返される日時は、実際には2012年8月31日午後2時26分41秒の金曜日である必要があります。

$stringtime = strtotime(DATE("m/d/y G:i", STRTOTIME("2012-08-31 02:26:41")));

誰かが私が間違っていることを教えてもらえますか?

4

4 に答える 4

4

Unixタイムスタンプは常にGMTです(タイムオフセットなし)。表示されている4時間の差を考慮して、php.iniまたはコードのいずれかでオフセットを設定する必要がある場合があります。

于 2012-09-01T01:09:42.853 に答える
0

date_default_timezone_set最初に関数を使用してタイムゾーンを設定する必要があります。

date_default_timezone_set('America/Los_Angeles');

手動

于 2012-09-01T01:12:38.877 に答える
0

strtotime()入力文字列を UNIX タイムスタンプに変換します。入力文字列にタイムゾーン情報がない場合、PHP はどのタイムゾーンを意味するかを推測する必要があります。実際には推測しません...デフォルトのタイムゾーンを調べます。

UNIX タイムスタンプは、1970 年 1 月 1 日 UTC からの秒数です。したがって、これを行う場合:

echo strtotime('1970-01-01 00:00:00');
// depends on your default time zone

あなたはゼロを期待するかもしれません。ただし、文字列でタイムゾーンを指定していないため、デフォルトのタイムゾーンが使用されます。実際の出力は異なります。

date_default_timezone_set('UTC');
echo strtotime('1970-01-01 00:00:00');
// always 0

これでゼロになります。または、あいまいさを取り除くことができます。

echo strtotime('1970-01-01 00:00:00 UTC');
// always 0

同様に、 を使用するdate()と、PHP は時刻を表示するときにデフォルトのタイムゾーンを適用します。

質問のコードは、実際にはエラーの場所を示していません。したがって、PHP がタイム スタンプとタイム ゾーンをどのように処理するかを理解していないことを除けば、問題が何であるかを実際に伝えることはできません。

タイムスタンプが正しい場合はdate_default_timezone_set()、タイムゾーンを設定するために を使用する必要があります。これは、 への今後のすべての呼び出しに影響しますdate()

DateTimeまた、1970 年からの秒数を数えるよりも簡単なクラスの使用に興味があるかもしれません。

于 2012-09-01T01:52:54.613 に答える
-1

G を使用しないでください。これにより、Gmt に変換され、使用する唯一の書式文字になります。フォーマット文字列が間違っているだけです

「D、d MY h:i:s A」

$stringtime = date( 'D, d MY h:i:s A' , strtotime("2012-08-31 02:26:41"));

于 2012-09-01T01:17:32.950 に答える