2016-08-25 67 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()); 

做這項工作。

相關問題