← エラー辞典に戻る

JavaScript

Uncaught RangeError: Invalid time value

Invalid Date に対して日付メソッドを呼んでいる

こんな症状

toISOString()やtoLocaleDateString()を呼んだ行で「Invalid time value」と出る。本当の原因はその前——new Date()に渡した日付文字列が無効で、Invalid Date になっているんだ。

まず試す

new Date(...) に渡している値を console.log で確認し、日付文字列を YYYY-MM-DD(ISO 8601)形式にする。

js
// ✅ ISO形式(YYYY-MM-DD)で渡す
const date = new Date('2024-01-01');
console.log(date.toISOString());

これで直らなければ、下の「自分のケース」を確認。

🔍 自分のケースはどれ?

  • 2024/1/1 などスラッシュ区切り
    → Safari等で無効になる。2024-01-01 のISO形式にする。
  • 存在しない日付(2月30日など)
    → 正しい日付にする。new Date(2024, 0, 1) の数値指定も確実(月は0始まり)。
  • APIの値が undefined / 空文字のまま渡っている
    → 使う前に if (!isNaN(date.getTime())) で有効な日付かチェックする。

なぜ起きる?

new Date('無効な文字列') は例外を投げずに「Invalid Date」という特殊な値を返すよ。エラーになるのはその後、toISOString() などのメソッドを呼んだ瞬間。だからエラー行だけ見ても原因がわからないんだ。無効になりやすいのは、(1) '2024/1/1' のようなスラッシュ区切り(ブラウザによって解釈が違い、Safariでは無効になることがある)、(2) '2024-1-1' のようなゼロ埋めなし、(3) 存在しない日付(2月30日など)、(4) APIから来た値が undefined や空文字のままDateに渡っているケースだよ。

✕ エラーが起きるコード
const date = new Date('2024/1/1');  // ここではエラーにならない(Invalid Dateになるだけ)
console.log(date.toISOString());
// Uncaught RangeError: Invalid time value ← ここで初めてエラー
✓ 直したコード
// ✅ ISO形式(YYYY-MM-DD)で渡す
const date = new Date('2024-01-01');
console.log(date.toISOString());

// ✅ 使う前に有効かチェック
if (!isNaN(date.getTime())) {
  console.log(date.toLocaleDateString());
}

✅ 直ったか確認

toISOString() などがエラーなく日付を返せばOK。

🆘 まだ直らないときは

エラー行ではなく『その日付がどこで作られたか』をさかのぼって確認しよう。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

🔗 別カテゴリの関連エラー

📖 この問題を学べるレッスン

JavaScriptコース(基礎から)で根本から理解する →

✏️ 手を動かして練習

練習ドリル一覧で実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 JavaScriptコースで基礎を学ぼう!

エラーの原因を根本から理解するには、基礎を体系的に学ぶのが近道です。完全無料・登録不要。

JavaScriptコースを始める →

❓ 関連するQ&A