我想告诉 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
}
更新 [2018-05-31] :如果您不关心来自其他 JS 上下文(外部窗口,框架或 iframe)的 Date 对象,则可以首选这种更简单的形式:
function isValidDate(d) {
return d instanceof Date && !isNaN(d);
}
而不是使用new Date()
你应该使用:
var timestamp = Date.parse('foo');
if (isNaN(timestamp) == false) {
var d = new Date(timestamp);
}
Date.parse()
返回一个时间戳,一个整数,表示自 01 / Jan / 1970 以来的毫秒数。如果它无法解析提供的日期字符串,它将返回NaN
。
您可以检查的有效性Date
对象d
通过
d instanceof Date && isFinite(d)
为避免跨框架问题,可以用。替换instanceof
检查
Object.prototype.toString.call(d) === '[object Date]'
在Borgar 的答案中调用getTime()
是不必要的,因为isNaN()
和isFinite()
都隐式转换为数字。