【发布时间】:2017-05-30 13:33:17
【问题描述】:
我一直在检查字符串是否代表Date。目前我有一种情况需要检查"Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)"这个字符串是否代表Date。我写了以下代码:
var tryConvert = new Date(input);
var tryMonth = tryConvert.getMonth();
if (!(tryMonth !== tryMonth)) {//checking for NaN
return true;
}
问题是输入可以是整数96,它成功返回true。期望的行为是它应该只适用于Date 实例、ISO 字符串、/\d\d\d\d\-\d\d\-\d\dT\d\d\:\d\d\:\d\d/g 和Date.toString() 字符串,如"Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)"。我怎样才能做到这一点?
为了更清楚,这里是完整的代码:
function isDate(input) {
if (!input) {
return false;
}
if (input instanceof Date) {
return true;
}
var rx = /\d\d\d\d\-\d\d\-\d\dT\d\d\:\d\d\:\d\d/g;
var time = rx.exec(input);
if (time) {
return true;
}
if (typeof input === 'string' || input instanceof String) {
var tryConvert = new Date(input);
var tryMonth = tryConvert.getMonth();
if (!(tryMonth !== tryMonth)) {
return true;
}
}
return false;
};
【问题讨论】:
-
使用那个正则表达式?
-
moment.js 是一个很好的日期处理库,它具有特定模式的解析方法。也许它可以帮助?
-
@SLaks,例如,不确定美国用户的 (new Date).toString() 会是什么。我怎样才能为它创建一个好的正则表达式?
-
date-fns.org 作为 momentjs 的替代品。
标签: javascript