2017-07-11 25 views
1

真的,我需要检查,如果日期是有效的,是不是这样的数字或东西:Date.parse(int)返回在JavaScript

function isDate(date) { 
     return (new Date(date) != "Invalid Date") && !isNaN(new Date(date)) && !angular.isNumber(parseInt(date)); 
    } 

如果date是数这种方法可行权,但如果datedatetime我得到错误的,因为angular.isNumber(parseInt(date)是真的

例如如果这个方法需要"1989-02-20T22:00:00Z"它应该返回true如果"6666"然后false

+0

'Date'可以在'milliseconds'代表所以这是一个'号码',你期望它是什么? –

+0

注意'angular.isNumber(NaN)'是'true'。 –

+0

@chsdk例如,如果此方法采用'“1989-02-20T22:00:00Z”',则应该返回'true',如果'“6666”'then“false' –

回答

0

我通过以下方式解决了这个问题:

function isValidDate(date) { 
     var regexp = new RegExp("(19|20)[0-9][0-9]-(0[0-9]|1[0-2])-(0[1-9]|([12][0-9]|3[01]))T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]"); 
     return regexp.exec(date); 
    } 
0

没有必要为&& !angular.isNumber(parseInt(date))一部分,它会给你一个错误的结果,如果parseInt(date)回报NaN

你可以使用下列内容:

function isDate(date) { 
    return (new Date(date) != "Invalid Date") && !isNaN(new Date(date)); 
} 

这会给你预期的结果,这里有一些测试:

isDate("1989-02-20T22:00:00Z"); 
true 
isDate("1989-02-20T22:00:Z"); 
false 
isDate("1989-02-20T00:00Z"); 
true 
isDate("1989-02-20E00:00Z"); 
false 
+0

如果我发送号码到这个函数它会返回'true'它不适合我。但是谢谢你的时间。我写的解决方案适合我。 –

+0

@ArsenAblaev这是因为'new Date(“6666”)'是一个有效的'date',如果你可以让你的函数带一个'Date'对象('new Date(date)'),并使用'date instanceof Date &&!isNaN(date.getTime())'如果它是一个有效的Date,则返回chekc。 –

+0

是的。但我需要解决特定的这种行为,所以正则表达式帮助我 –