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

我想告诉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并且这种行为出现在标准中,这正是我要找的。

  • 以下是我的做法:

    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
    }
    

    而不是使用new Date()你应该使用:

    var timestamp = Date.parse('foo');
    
    if (isNaN(timestamp) == false) {
      var d = new Date(timestamp);
    }
    

    Date.parse()返回一个时间戳,一个表示自1970年1月1日以来的毫秒数的整数。 如果无法解析提供的日期字符串,它将返回NaN


    您可以检查的有效性Date对象d通过

    d instanceof Date && isFinite(d)
    

    为了避免交叉框架问题,可以使用替换检查instanceof

    Object.prototype.toString.call(d) === '[object Date]'
    

    在Borgar的回答中调用getTime()是不必要的,因为isNaN()isFinite()都隐式转换为数字。

    链接地址: http://www.djcxy.com/p/3119.html

    上一篇: Detecting an "invalid date" Date instance in JavaScript

    下一篇: Where can I find documentation on formatting a date in JavaScript?