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。
この解決法は役立ちましたか?
🔗 関連するエラー
- RangeError: Invalid array length — 配列の長さに不正な値を指定している
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') — 取得しようとしたHTML要素が見つかっていない
- Uncaught ReferenceError: Cannot access 'x' before initialization — let/constの宣言前にアクセスしている
- Invalid left-hand side in assignment — 代入できないものに代入しようとしている
- Uncaught TypeError: Cannot read properties of undefined (reading 'length') — undefinedに対して.lengthを読んでいる
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説