原因1:タイムゾーンの設定が間違っている
date関数で表示した時刻が正しく表示されない場合は、タイムゾーン(地域ごとの時間帯)の設定が原因かもしれません。たとえば、タイムゾーンの設定が東京ではなく欧米などになっていると、現在の時刻が9時なのに、date関数を実行すると2時や5時などと表示されてしまいます。XAMPPをインストールして何も設定していない場合は、「date.timezone = Europe/Berlin」などと設定されている可能性があります。
次のようなエラーメッセージが表示されることもあります。「タイムゾーンを設定してください」という意味です。
——————————
Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘9.0/no DST’ instead in xxxxx.php on line xxxxx
——————————
タイムゾーンを「東京」に設定するには、PHP設定ファイル(php.ini)を開いて「date.timezone」という項目に「Asia/Tokyo」と指定します。
○タイムゾーンを設定する(php.ini)
date.timezone = Asia/Tokyo
date_default_timezone_set関数を使ってPHPスクリプトの中で設定することもできます。
<?php date_default_timezone_set('Asia/Tokyo'); echo "東京(協定世界時+9時間):" . date("Y/m/d H:i:s"); ?> <hr /> <?php date_default_timezone_set('UTC'); echo "UTC(協定世界時):" . date("Y/m/d H:i:s"); ?>
原因2:mktime関数のパラメータ順が間違っている
date関数で処理するタイムスタンプの取得にmktime関数がよく使われます。
mktime関数では、取得するタイムスタンプの日時を年・月・日・時・分・秒のパラメータで指定しますが、この順番は、時・分・秒・月・日・年です。
特に、右側3つの「月・日・年」を「年・月・日」の順に間違えてしまうと、次のように意図した日付を取得することができません。
<?php echo date("Y/m/d", mktime(0, 0, 0, 2012, 10, 31)); ?>
○実行結果
<?php echo date("Y/m/d", mktime(0, 0, 0, 10, 31, 2012)); ?>
○実行結果