Warm tip: This article is reproduced from serverfault.com, please click

其他-在 JavaScript 中检测“无效日期”日期实例

(其他 - Detecting an "invalid date" Date instance in JavaScript)

发布于 2009-08-30 11:34:40

我想区分 JS 中的有效日期对象和无效日期对象,但无法弄清楚如何:

var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'

编写isValidDate函数的任何想法

  • Ash 推荐Date.parse用于解析日期字符串,它提供了一种权威的方式来检查日期字符串是否有效。
  • 如果可能的话,我更希望我的 API 接受一个 Date 实例并能够检查/断言它是否有效。Borgar 的解决方案可以做到这一点,但我需要跨浏览器对其进行测试。我也想知道是否有更优雅的方式。
  • Ash 让我考虑根本不让我的 API 接受Date实例,这将最容易验证。
  • Borgar 建议先测试一个Date实例,然后再测试它Date的时间值。如果日期无效,则时间值为NaN我检查了ECMA-262并且这种行为符合标准,这正是我正在寻找的。
Questioner
orip
Viewed
0
2021-05-29 12:30:12

这是我将如何做到的:

if (Object.prototype.toString.call(d) === "[object Date]") {
  // it is a date
  if (isNaN(d.getTime())) {  // d.valueOf() could also work
    // date is not valid
  } else {
    // date is valid
  }
} else {
  // not a date
}

更新 [2018-05-31]:如果你不关心来自其他 JS 上下文(外部窗口、框架或 iframe)的 Date 对象,则可能更喜欢这种更简单的形式:

function isValidDate(d) {
  return d instanceof Date && !isNaN(d);
}