章: 第6章: 実践運用と成長
予約システムやログ記録で、時刻がズレていたことはありませんか?タイムゾーン設定の見落としが原因です。
問題と解決策
PHPのデフォルトタイムゾーンはサーバー設定に依存します。設定が UTC のサーバーで動かすと、日本時間(JST)より9時間ずれた時刻が記録されます。本番環境でログを確認して「時刻が合わない」と気づいても、すでに保存されたデータは修正できません。
date_default_timezone_set('Asia/Tokyo') をスクリプトの先頭で設定するか、php.ini に date.timezone = Asia/Tokyo を記述することで、確実に日本時間で処理できます。
日時処理アプローチの比較
| アプローチ | 特徴 | 推奨シーン |
date() / time() |
シンプル・軽量 | 単純なフォーマット変換 |
DateTime クラス |
オブジェクト指向・タイムゾーン対応 | 日付計算・比較 |
DateTimeImmutable |
イミュータブルで安全 | 日付計算(推奨) |
| Carbon(ライブラリ) | 豊富なメソッド | Laravelなど大規模 |
チェックポイント: DBに日時を保存するとき、タイムゾーンを統一していますか?アプリケーションとDB(MySQL等)の両方でタイムゾーンを合わせないと、保存・取得時にずれが生じます。
コードサンプル
<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
まとめ & 次のステップ
date_default_timezone_set('Asia/Tokyo')はスクリプトの先頭で必ず設定します- DB保存は
Y-m-d H:i:s形式(MySQLのDATETIME型)が一般的です - 日付計算には
DateTimeクラスやDateTimeImmutableを活用しましょう - タイムゾーンはアプリとDB両方で統一することが重要です
次回は 文字コード — 文字化けを根絶するUTF-8統一戦略を学びます。