2014-04-08 33 views
1

我試着檢查是否值是這樣一個日期:角JS - 而isDate()將無法工作

var input = "2014-04-01T15:22:30.000Z"; 

var dateTime = { 
    year: $filter('date')(input,'yyyy'), 
    day: $filter('date')(input,'EEE'), 
    dayNum: $filter('date')(input,'d'), 
    month: $filter('date')(input,'MMM'), 
    hours:$filter('date')(input,'H'), 
    mins: $filter('date')(input,'m'), 
    seconds:$filter('date')(input,'ss') 
}; 

if(angular.isDate(dateTime.year+' '+dateTime.month+' '+dateTime.dayNum)) { 
    // always false 
} 

爲什麼總是假的?

年,月等片都正確過濾:/

回答

4

下面的語句總是假的,也許你的約而isDate是如何工作的假設是不正確的?

angular.isDate('2014 Mar 1'); 

這裏是source code for the isDate function。你會看到它檢查提供的值是否是一個javascript Date對象。

function isDate(value){ 
    return toString.call(value) === '[object Date]'; 
} 

你可能會問,爲什麼角可以讓你做到以下幾點:

var input = "2014-04-01T15:22:30.000Z"; 
var year = $filter('date')(input,'yyyy'); 

這是因爲date filter實際上返回一個格式化的副本之前您的輸入轉換成日期。所以,使用日期過濾器,它可以讓你傳入一個字符串,但isDate函數需要一個Date對象。

0

dateTime.year+' '+dateTime.month+' '+dateTime.dayNum是一個字符串,不是日期對象。

+0

好的請繼續前進 – sbaaaang