1

EST 時間については、次のように設定しました。

date_default_timezone_set("America/New_York");

ページが読み込まれると、次の方法で EST 時間を取得しています。

$time = time();

問題は、タイムスタンプと日時形式の間で文字列を前後に変換するときです。

10/31/2012 7:30pm 1351729800 | 10/31/2012, 8:30 pm
11/2/2012 7:30pm 1351902600 | 11/02/2012, 8:30 pm
11/3/2012 8:00pm 1351990800 | 11/03/2012, 9:00 pm
11/7/2012 8:00pm 1352336400 | 11/07/2012, 8:00 pm
11/9/2012 8:00pm 1352509200 | 11/09/2012, 8:00 pm
11/10/2012 8:00pm 1352595600 | 11/10/2012, 8:00 pm

これらの日付と時刻は同じであると予想しています。

最初のセクション (「|」の前) は、「10/31/2012 7:30pm」や strtotime(「10/31/2012 7:30pm EST」) などの単純な文字列です。

セクション (「|」の後) は、前の strtotime() 値の date() です。

文字列から時刻 (strtotime) に変換し、返された日付形式が文字列入力と同じであることを再確認するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

これは、現在ニューヨークがサマータイム(EST ではなく EDT)を実施しているためだと思います。これは次のような影響を与えます。

date_default_timezone_set("America/New_York");
strtotime("10/31/2012 7:30pm"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EDT"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EST"); // translates to "Wed, 31 Oct 2012 20:30:00 -0400"

迅速な修正は、おそらくタイムゾーンを文字列に追加しないことstrtotime()です。設定した正しいデフォルトのタイムゾーンが使用されます。

DateTime createFromFormat関数を使用して、日付がどのように解析されているかについてもう少し正確にすることができます。

$date = DateTime::createFromFormat('m/d/Y g:ia', "10/31/2012 7:30pm");
echo $date->format('U');

あるいは、11 月まで待てば問題は自然に解決します :-)

于 2012-08-01T05:46:26.423 に答える