第51回: 日時処理 — タイムゾーンとフォーマットを正しく扱う実務スキル

章: 第6章: 実践運用と成長

予約システムやログ記録で、時刻がズレていたことはありませんか?タイムゾーン設定の見落としが原因です。

問題と解決策

PHPのデフォルトタイムゾーンはサーバー設定に依存します。設定が UTC のサーバーで動かすと、日本時間(JST)より9時間ずれた時刻が記録されます。本番環境でログを確認して「時刻が合わない」と気づいても、すでに保存されたデータは修正できません。

date_default_timezone_set('Asia/Tokyo') をスクリプトの先頭で設定するか、php.inidate.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統一戦略を学びます。

Related Articles