2016-08-25 69 views
2

我有这样的日期字符串1 May 2010 To 15 Aug 2016。我只是想检查这是我的函数上的日期字符串,而不是继续一个函数。当我检查此字符串与new Date(value)它返回Invalid日期。我该如何检查这个日期?检查isDate返回无效的日期

+2

有两个日期? 2010年5月1日和2016年8月15日。您应该拆分这些并检查两者。 – Evus

+0

inspiration http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript – daremachine

+0

有两个日期,这些日期由你或(静态)或从某些地方给出,如动态 –

回答

0
var checkDate = function (str){ 
    var dates = str.split("To"); 
    for(var i = 0; i < dates.length; i++) { 
     if (moment(dates[i]).isValid()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

我可以在我的代码的任何地方使用该功能。

+0

我已根据您的需要更改了我的功能。你需要这样做。请检查。这里你的代码没有机会检查数组的第二部分。例如:认为案件“2001年5月1日至8月15日20时”。它会返回true。但第二部分是无效的。检查我的功能,如果可以,请将其标记为已接受,因为它可以帮助其他人。 –

+0

您可以用'str.split('To').every(s => return moment(s).isValid());替换整个函数;'但是您应该提供字符串格式给解析器。 – RobG

1
var str = "1 May 2010 To 15 Aug 2016"; 
//First split string 
var array = str.split("To"); 
//then check if both are dates 
for(var i = 0; i < array.length; i++) { 
if(isNaN(new Date(array[i]))) { //Checking date 
    alert(array[i]+ ' is not valid date'); 
} 
} 
3

我会使用js日期库时刻js为此。

var checkDate = function (str){ 
    var dates = str.split("To"); 
    var flag = true; 
    for(var i = 0; i < dates.length; i++) { 
     if (moment(dates[i]).isValid()) { 
     flag = false; 
    } 
    } 

    return flag; 
} 

我创建了一个小提琴为

https://jsfiddle.net/Refatrafi/wj5zc75e/

+0

我有改变你的功能,我更喜欢在我的代码中使用它。谢谢并看到我的答案。 –

+0

感谢哥们,它节省了我的时间! –

+0

请不要这样做。阅读并遵循[*文档*](http://momentjs.com/docs/#/parsing/string/)和**始终**提供要解析的字符串格式。否则,你将把它留给解析器来猜测。它将返回返回有效日期的第一次尝试,而不一定是“正确”的日期。 – RobG

1

解析字符串时,应始终提供解析字符串的格式。这可以非常简单地使用ES5 方法来完成:

var isValid = '1 May 2010 To 15 Aug 2016'.split(' To ').every(function(s) { 
 
    return moment(s,'D MMM YYYY').isValid(); 
 
}); 
 

 
console.log(isValid);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.js"></script>

如果箭头功能都正常,则:

var isValid = '1 May 2010 To 15 Aug 2016'.split(' To ').every(s=>moment(s,'D MMM YYYY').isValid()); 

做这项工作。

相关问题