JavaScript 逆引き集 | 日付を ISO 文字列に

JavaScript JavaScript
スポンサーリンク

JavaScriptで日付をISO文字列にする(toISOString)の基本と実践

ISO 8601形式はシステム間で扱いやすい標準日時フォーマットです。new Date().toISOString()は常にUTC基準の文字列(末尾がZ)を返します。表示やAPI送受信で迷いにくいのが利点です。


構文とポイント

const now = new Date();
const iso = now.toISOString(); // 例: "2025-12-05T00:31:00.000Z"
JavaScript
  • UTC固定: ローカルタイムゾーンではなく、常にUTCで出力します(末尾の「Z」はUTCを示す)。
  • 書式: おおむね YYYY-MM-DDTHH:mm:ss.sssZ の形で、Date.parseとも互換の簡略ISO形式です。
  • 返り値: 文字列。Date自体は不変で、整形済み文字列だけが取得できます。

すぐ使えるテンプレート集

現在日時をISO文字列で取得(API送信・ログ向け)

const isoNow = new Date().toISOString();
console.log(isoNow); // "2025-12-05T00:31:00.000Z"
JavaScript
  • 用途: タイムゾーン差のない時刻表現が必要なAPIやログ記録に最適。

ローカル表示とISOの違いを確認

const now = new Date();
console.log(now.toString());      // ローカルTZの表記
console.log(now.toISOString());   // UTCのISO表記(Z付き)
JavaScript
  • ポイント: ローカル表示は環境に依存、ISOは常にUTC。混同しないように使い分ける。

任意のDateをISO化(送信前整形)

const d = new Date("2025-12-05T09:31:00+09:00"); // JST指定
console.log(d.toISOString()); // "2025-12-05T00:31:00.000Z"(UTCへ換算)
JavaScript
  • ポイント: ローカル指定でも、出力はUTCへ変換されます。

よくある落とし穴と対策

  • タイムゾーンが消える問題: ISOはUTCのため、ローカルTZ(例: +09:00)情報を保持したまま出したい場合は自前整形が必要。
    • 対策: 年月日・時分秒をgetFullYear()などで取り出し、+09:00のようなオフセットを付けた文字列を組み立てる(例:YYYY-MM-DDTHH:mm:ss+09:00)。タグ付きテンプレートや関数化で再利用性を上げる。
  • 無効なDate: 無効な日時に対しては例外(RangeError)が起きうるため、入力はバリデーションする。
  • 表示と保存の混同: UI表示はtoLocaleString(ロケール・タイムゾーン指定)を使い、保存・送受信はtoISOStringに分けると安全。

実務で便利な関数

// 現在のISO文字列(UTC)
const nowISO = () => new Date().toISOString();

// 任意のDateを「ローカルTZ付きISO風」に整形(例:JST +09:00)
function toISOWithOffset(date, offsetMinutes) {
  const pad = n => String(n).padStart(2, "0");
  const y = date.getFullYear();
  const m = pad(date.getMonth() + 1);
  const d = pad(date.getDate());
  const hh = pad(date.getHours());
  const mm = pad(date.getMinutes());
  const ss = pad(date.getSeconds());
  const ms = String(date.getMilliseconds()).padStart(3, "0");
  const sign = offsetMinutes >= 0 ? "+" : "-";
  const abs = Math.abs(offsetMinutes);
  const oh = pad(Math.floor(abs / 60));
  const om = pad(abs % 60);
  return `${y}-${m}-${d}T${hh}:${mm}:${ss}.${ms}${sign}${oh}:${om}`;
}

// 例:JSTは+540分(= 9*60)
console.log(toISOWithOffset(new Date(), 9 * 60)); // "YYYY-MM-DDTHH:mm:ss.sss+09:00"
JavaScript
  • 狙い: toISOString()のUTC固定を補い、ローカルTZ付きフォーマットが必要なケースに対応。

練習問題(手を動かして覚える)

  • 1. 現在のISO文字列を出力
console.log(new Date().toISOString());
JavaScript
  • 2. ローカル表示(日本語)とISOを比較
const now = new Date();
console.log(now.toLocaleString("ja-JP", { timeZone: "Asia/Tokyo" }));
console.log(now.toISOString());
JavaScript
  • 3. 任意日時をJST付き書式で整形
const d = new Date("2025-12-05T09:31:00+09:00");
console.log(toISOWithOffset(d, 9 * 60)); // "+09:00"付き
JavaScript

直感的な指針

  • 保存・API: UTCのtoISOString()で一貫性を担保。
  • 人向け表示: toLocaleStringでロケール・TZを指定。
  • TZ付きISO風が必要: 自前整形でオフセットを明示。
タイトルとURLをコピーしました