有什么简单的方法来检查一个值是否为有效日期,允许任何已知的日期格式。
例如,我有值10-11-2009、10/11/2009、2009-11-10T07:00:00+0000,这些值都应该被识别为日期值,而值200、10、350不应该被识别为日期值。如果可能的话,最简单的检查方法是什么?因为时间戳也是允许的。
有什么简单的方法来检查一个值是否为有效日期,允许任何已知的日期格式。
例如,我有值10-11-2009、10/11/2009、2009-11-10T07:00:00+0000,这些值都应该被识别为日期值,而值200、10、350不应该被识别为日期值。如果可能的话,最简单的检查方法是什么?因为时间戳也是允许的。
当前回答
以下是我如何在我现在正在开发的应用程序中解决这个问题:
根据krillgar的反馈更新:
var isDate = function(date) {
return (new Date(date) !== "Invalid Date") && !isNaN(new Date(date));
}
其他回答
我认为最直接的解决办法是
Date.parse(yourDate) > 0 ? true : false;
如果不是有效日期,则为NaN, NaN不大于0。
new Date(Date) === '无效日期'只适用于Firefox和Chrome。IE8(我在我的机器上用于测试的那个)提供NaN。
正如已接受的答案所述,date .parse(date)也适用于数字。所以为了解决这个问题,你也可以检查它是不是一个数字(如果这是你想确认的事情)。
var parsedDate = Date.parse(date);
// You want to check again for !isNaN(parsedDate) here because Dates can be converted
// to numbers, but a failed Date parse will not.
if (isNaN(date) && !isNaN(parsedDate)) {
/* do your work */
}
下面是一个只使用Date.parse()的改进函数:
function isDate(s) {
if(isNaN(s) && !isNaN(Date.parse(s)))
return true;
else return false;
}
注意:date. parse()将解析数字:例如date. parse(1)将返回日期。这里我们检查s是不是数字,是不是日期。
我会这样做
var myDateStr= new Date("2015/5/2");
if( ! isNaN ( myDateStr.getMonth() )) {
console.log("Valid date");
}
else {
console.log("Invalid date");
}
在这里玩耍
这是一个极简的版本。
var isDate = function (date) {
return!!(function(d){return(d!=='Invalid Date'&&!isNaN(d))})(new Date(date));
}