JavaScript RangeError: Invalid time value 错误

在无效日期调用方法时会出现“Uncaught RangeError: Invalid time value”错误,例如 new Date(‘asdf’).toISOString()。 要解决该错误,请在调用该方法之前有条件地检查日期是否有效。

JavaScript RangeError: Invalid time value 错误

console.log(new Date('asdf')); // 👉️ "Invalid Date"

// ⛔️ Uncaught RangeError: Invalid time value
const d = new Date('asdf').toISOString();

检查浏览器控制台或终端(如果使用 Node.js)中的错误消息。

上面的截图显示错误发生在 index.js 文件的第 4 行。

当提供的字符串不是有效日期时,Date() 构造函数返回“无效日期”值。 在无效日期调用方法会导致错误。

console.log(new Date('asdf')); // 👉️ Invalid Date
console.log(new Date('2022-32-33')); // 👉️ Invalid Date
console.log(new Date('one-two-20')); // 👉️ Invalid Date

要解决“Invalid time value”错误,请仅在有效日期对象上调用日期方法。

console.log(new Date(1317996123)); // 👉️ Fri Jan 16 ...
console.log(new Date('24 September 2022 15:30 UTC')); // 👉️ Sat Sep 24 ...

这是一个函数,我们可以使用它在调用方法之前验证日期。

function dateIsValid(date) {
  return !Number.isNaN(new Date(date).getTime());
}


console.log(dateIsValid(1317996123)); // 👉️ true
console.log(dateIsValid('24 September 2022 15:30 UTC')); // 👉️ true
console.log(dateIsValid('asdf')); // 👉️ false
console.log(dateIsValid('2022-32-33')); // 👉️ false

我们检查该值是否不是 NaN 并返回结果。 如果该值不是 NaN,则我们有一个可以安全调用方法的有效日期。

function dateIsValid(date) {
  return !Number.isNaN(new Date(date).getTime());
}


const date = '2022-32-33';

if (dateIsValid(date)) {
  console.log(new Date(date).toISOString());
} else {
  // 👇️ this runs
  console.log('not a valid date');
}

在对日期调用 toISOString() 方法之前,我们对其进行验证。 这使我们能够避免出现“Invalid time value” RangeError。


总结

在无效日期调用方法时会出现“Uncaught RangeError: Invalid time value”错误,例如 new Date(‘asdf’).toISOString()。 要解决该错误,请在调用该方法之前有条件地检查日期是否有效。