在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
函数的想法?
Date.parse
来解析日期字符串,它提供了一种权威的方法来检查日期字符串是否有效。 Date
实例,这将是最容易验证的。 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()
都隐式转换为数字。
上一篇: Detecting an "invalid date" Date instance in JavaScript
下一篇: Where can I find documentation on formatting a date in JavaScript?