• ベストアンサー

date関数の問題

echo date('n/j',1257058800),":"; echo date('n/j',1257145200); 同じコードをローカルとサーバ側両方実行しました。 結果 ローカル 11/1:11/2 サーバ側 11/1:11/1 どこが問題ですか

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ちなみに月日だけで無く、時分秒まで出した場合どうなりますか? print date('Y/m/d H:i:s', 1257058800) . ":".date(('Y/m/d H:i:s',1257145200)."\n"; 実行環境:Linux(日本時間)の場合 2009/11/01 16:00:00:2009/11/02 16:00:00 1257058800と1257145200の差は86400(24*60*60) なので、本来であれば次の日になると思います。 16:00という微妙な時間ですので、日本時間のサーバーでは 同じ日になる事は無いと思います。 同じ日になる可能性があるとしたら likewindさんの実行サーバーがアメリカ?(時差16時間?)のサーバーで うるう秒で1秒プラスになってるとかそういう特殊な 事情があるのかもしれません。 あくまでも想像なので、とりあえず時分秒までの出力を見て お考えください。

likewind
質問者

補足

ご回答いただいて、ありがとうございました。 はい、アメリカのサーバです。 print date('Y/m/d H:i:s', 1257058800) . ":".date(('Y/m/d H:i:s',1257145200)."\n"; 実行結果は以下です。 2009/11/01 00:00:00:2009/11/01 23:00:00 これをみると、差は82800(23*60*60)ですね。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ああ、アメリカですか・・・ 意識したことなかったですが、DST(サマータイム)の基準日が 11月の第一日曜日ですね、ちゃんと計算してないのでなんとも いえませんが、その関係で1時間ずれがでるはずです・・・

likewind
質問者

補足

ご回答ありがとうございました。 そうですか、まったく知りませんでした。 確かに2009年11月1日は日曜日です。アメリカのサマータイム実施日らしいです。 その関係かなぁー  資料などを見たら、結構複雑そうですね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

print date('Z'); してみてください。オフセット時間がずれているのでは? GMTのズレとか

likewind
質問者

お礼

ご回答ありがとうございました。 原因教えていただけませんか。 タイムゾーンが同じではないですが、どうして echo date('n/j',1257058800); echo date('n/j',1257145200); が同じ日になりますか、1257145200-1257058800=86400=一日の差があります。

likewind
質問者

補足

print date('Z'); の実行結果 サーバ側 -25200 ローカル 32400 やっぱり違いますね。 ローカルとサーバのコードにdate_default_timezone_set('Asia/Tokyo'); を追加したら、解決できました。 ありがとうございました。

関連するQ&A