JavaScriptで日付文字列を扱う場面はよくあります。たとえば「2024-04-01」という文字列を比較・演算したい場合や、APIから受け取った日付文字列を表示用にフォーマットしたい場合です。
new Date()に文字列を渡す
もっとも簡単な方法はnew Date("日付文字列")です。
// ISO 8601形式(推奨)
const d1 = new Date("2024-04-01");
console.log(d1); // Mon Apr 01 2024 09:00:00 GMT+0900(JST)
// 日時も指定できる
const d2 = new Date("2024-04-01T15:30:00");
console.log(d2.getFullYear()); // 2024
console.log(d2.getMonth()); // 3 ※0始まりなので4月=3
console.log(d2.getDate()); // 1
new Date("2024-04-01")はISO 8601の日付のみ指定だとUTCとして解釈されます。JST(UTC+9)環境では前日の09:00になる可能性があります。時刻も含めた"2024-04-01T00:00:00"(ローカル時刻)または"2024-04-01T00:00:00+09:00"(タイムゾーン指定)を使うと安全です。Date.parse()でタイムスタンプを取得する
Date.parse()は日付文字列をミリ秒(Unixタイムスタンプ)に変換します。new Date()との組み合わせで使います。
const ts = Date.parse("2024-04-01T00:00:00+09:00");
console.log(ts); // 1711897200000(ミリ秒)
const d = new Date(ts);
console.log(d.toISOString()); // "2024-03-31T15:00:00.000Z"(UTC)
// 解析失敗時はNaN
const bad = Date.parse("invalid-date");
console.log(isNaN(bad)); // true → エラーチェックが必要
>、<、-)するのが便利です。様々な形式の文字列をパースする
API等から受け取る日付は様々な形式があります。形式が決まっている場合は手動でパースすると確実です。
// "2024/04/01" 形式をパース
function parseJpDate(str) {
const [y, m, d] = str.split("/").map(Number);
return new Date(y, m - 1, d); // 月は0始まり
}
const d = parseJpDate("2024/04/01");
console.log(d.toLocaleDateString("ja-JP")); // "2024/4/1"
// "20240401" 形式をパース
function parseCompact(str) {
const y = str.slice(0, 4);
const m = str.slice(4, 6);
const day = str.slice(6, 8);
return new Date(`${y}-${m}-${day}T00:00:00`);
}
変換後のDate操作
Date型に変換した後は、以下のメソッドで情報を取り出せます。
const d = new Date("2024-04-01T10:30:00");
console.log(d.getFullYear()); // 2024
console.log(d.getMonth() + 1); // 4 ※getMonthは0始まりなので+1
console.log(d.getDate()); // 1
console.log(d.getHours()); // 10
console.log(d.getMinutes()); // 30
// フォーマット済み文字列
console.log(d.toLocaleDateString("ja-JP")); // "2024/4/1"
console.log(d.toISOString()); // "2024-04-01T01:30:00.000Z"(UTC変換)
よくある質問(FAQ)
const diffDays = (d2 - d1) / (1000 * 60 * 60 * 24);で日数差が計算できます。まとめ
- new Date("ISO文字列"):最も基本的。ISO 8601形式が確実
- Date.parse():ミリ秒で比較・演算したい場面に便利
- 手動パース:日本式(yyyy/mm/dd)など固定フォーマットに確実
- 日付のみ指定のISO文字列はUTC解釈されるためタイムゾーンに注意

