2017-05-30 81 views
0

我一直在檢查字符串是否代表Date。目前我有一個情況,我需要檢查是否"Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)"這個字符串代表Date。我寫了下面的代碼:檢查JavaScript字符串是否代表日期

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/gDate.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; 
}; 
+1

使用該正則表達式? – SLaks

+2

[檢查字符串是否爲日期值]可能的重複(https://stackoverflow.com/questions/7445328/check-if-a-string-is-a-date-value) – Zenoo

+5

moment.js是一個很好的lib用於具有特定模式的解析方法的日期處理。也許它可以幫助? –

回答

1

對於你的使用情況,結合你的檢查,如果input是檢查一個字符串,如果它是一個解析的數量還是不應該做的伎倆。

在這裏,我已經添加了添加了這個檢查要檢查是否input是一個字符串:

if ((typeof input === 'string' || input instanceof String) && isNaN(input)) { 
    var tryConvert = new Date(input); 
    var tryMonth = tryConvert.getMonth(); 
    if (!(tryMonth !== tryMonth)) { 
     return true; 
    } 
} 

return false; 

基本上,這將返回false如果input是包含965555或任何其他解析的數量,但實際日期字符串諸如Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)之類的字符串不是可分析的數字,因此他們將通過isNaN()檢查並繼續進行轉換測試。

您也可以刪除RegExp測試,因爲它只測試一種特定的日期格式。

相關問題