范围错误:无效日期
JavaScript 异常 "invalid date" 发生在尝试将无效日期转换为 ISO 日期字符串时。
消息
RangeError: Invalid time value (V8-based) RangeError: invalid date (Firefox) RangeError: Invalid Date (Safari)
错误类型
出了什么问题?
您正在将一个 无效日期 值转换为 ISO 日期字符串。这通常通过以下三种方式之一发生
- 调用
toISOString()
方法 - 调用
toJSON()
方法,它会隐式调用toISOString
- 使用
JSON.stringify()
来对日期进行字符串化,它会隐式调用toJSON
当您尝试解析无效日期字符串或将时间戳设置为超出范围的值时,就会生成无效日期。无效日期通常会导致所有日期方法返回 NaN
或其他特殊值。但是,此类日期没有有效的 ISO 字符串表示形式,因此当您尝试执行此操作时会抛出错误。
示例
无效情况
js
const invalid = new Date("nothing");
invalid.toISOString(); // RangeError: invalid date
invalid.toJSON(); // RangeError: invalid date
JSON.stringify({ date: invalid }); // RangeError: invalid date
但是,大多数其他方法会返回特殊值
js
invalid.toString(); // "Invalid Date"
invalid.getDate(); // NaN
有关更多详细信息,请参阅 Date.parse()
文档。
有效情况
js
new Date("05 October 2011 14:48 UTC").toISOString(); // "2011-10-05T14:48:00.000Z"
new Date(1317826080).toISOString(); // "2011-10-05T14:48:00.000Z"