UTCとローカル時刻の関係を押さえる
UTCは世界共通の基準となる時刻で、日本のローカル時刻(JST)はUTCより9時間進んでいます。プログラムの内部では時刻をUTCで持ち、表示するときだけ閲覧者のローカル時刻に変換するのが基本です。
ずれの典型は、UTCのつもりの値をローカル時刻として解釈してしまう、あるいはその逆です。9時間という分かりやすい差が出たら、まずUTCとJSTの取り違えを疑ってください。
日付が1日ずれる現象も根は同じです。たとえば日本時間の午前0時台はUTCではまだ前日のため、日付だけを切り出すと1日前にずれることがあります。
- 内部では UTC で持つ、表示時にローカルへ変換する
- 9時間ちょうどのずれ → UTC と JST の取り違え
- 日付が1日ずれる → 日付部分だけを切り出した変換ミス
文字列のパースで起きるずれ
日時の文字列をプログラムに渡すとき、フォーマットによって解釈が変わります。年月日だけの形式は環境によってUTC基準で解釈されることがあり、時刻部分まで含む形式はローカル基準で解釈されることがあります。同じ値のつもりが、入力の書き方で結果がずれてしまいます。
ずれを避けるには、タイムゾーンを明示したISO 8601形式(末尾にZやプラスマイナスのオフセットが付く形)で受け渡すのが安全です。曖昧な文字列を避けるだけで、多くのずれは消えます。
症状別チェック表
日付・時刻がずれるは、症状を分けずに直そうとすると原因探しが長引きます。まず「自分だけで起きるのか」「全員で起きるのか」「特定ブラウザだけか」「差し替え後だけか」を切り分けます。
確認順序を固定すると、相対パス、ファイル名、キャッシュ、認証、外部読み込みのどこで止まっているかが見えます。修正後はローカル確認だけで終わらせず、実際の共有URLで再表示して、相手と同じ条件で直ったことを確認します。
- 自分だけ表示されない: キャッシュ、ログイン状態、ブラウザ拡張、端末幅を確認する
- 全員で表示されない: ファイル構成、相対パス、大文字小文字、アップロード漏れを見る
- 一部だけ崩れる: CSS/画像/JSごとに読み込みエラーを分ける
- 差し替え後だけ古い: URL、キャッシュ、更新対象ファイルの取り違えを確認する
保存と表示で基準を揃える
データを保存するときはUTCで統一し、画面に出すときに閲覧者のタイムゾーンへ変換する、という一貫した方針を決めると混乱しません。保存はローカル、表示もローカルだが変換を忘れる、といった場当たり的な扱いがずれを生みます。
サーバーやビルド環境のタイムゾーン設定にも注意が必要です。実行環境がJSTかUTCかで、ログや生成される日時が変わることがあります。環境に依存せず、コード側で明示的に変換するのが安全です。
ずれの切り分け手順
日時がおかしいときは、次の順で確認すると原因を絞り込めます。
- ずれ幅を測る(9時間ちょうどならUTC/JST取り違え、1日なら日付切り出しを疑う)
- 元データがUTCで保存されているか確認する
- 受け渡す文字列をタイムゾーン明示のISO 8601形式に揃える
- 表示処理で意図したタイムゾーンへ変換しているか確認する
- 実行環境のタイムゾーン設定に依存していないか見直す
閲覧者の環境で確認するには
時刻のずれは、開発者の手元では出ないのに、別の環境やタイムゾーンの閲覧者で初めて顕在化することがあります。実際に配信されたページを、関係者それぞれの端末で開いてもらって確認すると、思わぬずれに気づけます。
ギガサイト便にHTMLをドロップすると 〇〇.giga-site.com のhttpsの共有URLが発行され、関係者に渡してそれぞれの環境で表示を確認してもらえます。修正したら同じURLのままファイルを差し替えられるので、リンクを送り直さずに「直ったか」を再確認してもらえます。アクセスログで誰がいつ見たかも残せます。
よくある質問
時刻がちょうど9時間ずれます。
UTCとJST(日本時間)の取り違えが典型です。UTCの値をローカル時刻として解釈している、またはその逆になっていないか確認してください。内部はUTCで持ち、表示時にローカルへ変換する方針に揃えると安定します。
日付だけが1日ずれます。
日本時間の午前0時台はUTCではまだ前日のため、日付部分だけを切り出すと1日前後することがあります。時刻まで含めてタイムゾーンを意識して変換してください。
日時の文字列はどう渡すのが安全ですか。
タイムゾーンを明示したISO 8601形式(末尾にZやオフセットが付く形)が安全です。年月日だけの曖昧な形式は環境によって解釈が変わり、ずれの原因になります。
開発環境では正しいのに公開すると違います。
実行環境のタイムゾーン設定の違いが影響している可能性があります。環境に依存せずコード側で明示的に変換し、実際に配信したページを複数の環境で開いて確認してください。
原因が分からないときはどこから確認すべきですか?
まず自分だけの問題か全員の問題かを分けます。次にシークレットウィンドウ、別ブラウザ、スマホで確認し、ファイル構成・相対パス・キャッシュ・認証設定を順に見ます。