JavaScript 逆引き集 | 日付フォーマット(簡易)

JavaScript JavaScript
スポンサーリンク

JavaScript日付フォーマット(簡易)の基本と実践

最短で「YYYY-M-D」などの文字列にしたいなら、Dateの各値を取り出してテンプレートリテラルで組み立てます。月は0始まりなので「+1」を忘れないのがコツです。


基本の考え方

const d = new Date();
const str = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;
console.log(str); // 例: "2025-12-5"
JavaScript
  • 月は0始まり: 1月=0、12月=11。表示時は +1 が必須。
  • そのままだとゼロ埋めなし: 12-5-3のように「一桁」がそのまま出る。見栄えを揃えるならゼロ埋め関数を使う。

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

// 1) YYYY-MM-DD(ゼロ埋めあり)
const d = new Date();
const pad2 = n => String(n).padStart(2, "0");
const y = d.getFullYear();
const m = pad2(d.getMonth() + 1);
const day = pad2(d.getDate());
console.log(`${y}-${m}-${day}`); // 例: "2025-12-05"

// 2) YYYY/MM/DD HH:MM(ゼロ埋めあり)
const h = pad2(d.getHours());
const mi = pad2(d.getMinutes());
console.log(`${y}/${m}/${day} ${h}:${mi}`); // 例: "2025/12/05 09:43"

// 3) 日本語表記(YYYY年MM月DD日)
console.log(`${y}${m}${day}日`); // 例: "2025年12月05日"

// 4) コンパクト(YYYYMMDD)
console.log(`${y}${m}${day}`); // 例: "20251205"

// 5) 任意区切り文字を自由に
const sep = ".";
console.log(`${y}${sep}${m}${sep}${day}`); // "2025.12.05"
JavaScript
  • ポイント: ゼロ埋め関数を1つ用意しておくと、どの形式にも簡単に対応できます。

実務で便利なフォーマッタ関数

function formatDate(d, fmt = "YYYY-MM-DD") {
  const pad2 = n => String(n).padStart(2, "0");
  const map = {
    YYYY: String(d.getFullYear()),
    MM: pad2(d.getMonth() + 1),
    M: String(d.getMonth() + 1),
    DD: pad2(d.getDate()),
    D: String(d.getDate()),
    HH: pad2(d.getHours()),
    mm: pad2(d.getMinutes()),
    ss: pad2(d.getSeconds()),
  };
  return fmt.replace(/YYYY|MM|M|DD|D|HH|mm|ss/g, t => map[t]);
}

// 使用例
const d = new Date();
console.log(formatDate(d));                 // "2025-12-05"
console.log(formatDate(d, "YYYY/MM/DD"));   // "2025/12/05"
console.log(formatDate(d, "YYYY年M月D日")); // "2025年12月5日"
console.log(formatDate(d, "HH:mm"));        // "09:43"
JavaScript
  • ポイント: プレースホルダ置換で柔軟に。必要になったらトークンを追加して拡張できます。

バリエーションとロケール整形

  • 簡単にロケール準拠で整形したい:
    • ポイント: toLocaleDateStringはロケールと書式を任せたいときに便利。
console.log(new Date().toLocaleDateString("ja-JP", { year: "numeric", month: "2-digit", day: "2-digit" }));
// 例: "2025/12/05"
JavaScript
  • 曜日を付けたい:
const weekdays = ["日","月","火","水","木","金","土"];
const d = new Date();
console.log(`${formatDate(d, "YYYY/MM/DD")}${weekdays[d.getDay()]})`);
// 例: "2025/12/05(金)"
JavaScript
  • 時間込みの日本式:
const d = new Date();
console.log(`${formatDate(d, "YYYY年MM月DD日 HH:mm:ss")}`);
JavaScript

よくある落とし穴と対策

  • 月の+1を忘れる:getMonth()は0〜11。
    • 対策: 取り出した瞬間に +1、フォーマッタ関数に閉じ込める。
  • ゼロ埋め不足で見栄えが崩れる: 1桁の月・日・時・分・秒。
    • 対策: padStart(2,"0") を共通関数で使い回す。
  • タイムゾーン差で意図と違う日付に: 深夜付近でUTCとのズレ。
    • 対策: 表示はローカルを使う(toLocaleString)、保存はISO(UTC)。計算と表示を分ける。
  • 複雑な書式の手書きが増える: 曜日、週番号、タイムゾーンオフセットなど。
    • 対策: 自作の簡易フォーマッタは基本だけに絞り、複雑要件はIntlや軽量ライブラリ(dayjs/date-fnsなど)を検討。

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

// 1) 今日を "YYYY-MM-DD" で
console.log(formatDate(new Date(), "YYYY-MM-DD"));

// 2) 今日を "YYYY/MM/DD HH:mm:ss" で
console.log(formatDate(new Date(), "YYYY/MM/DD HH:mm:ss"));

// 3) 曜日付きの日本式
const d = new Date();
const w = ["日","月","火","水","木","金","土"][d.getDay()];
console.log(`${formatDate(d, "YYYY年MM月DD日")}${w})`);
JavaScript

タイトルとURLをコピーしました