2014-12-19 47 views
0

我有一個應用程序需要根據它們是否與當前日期或過去相同來過濾項目。我的日期值被格式化爲像「12/19/2014」這樣的字符串。基於當前日期的角度過濾

我有一個過濾器設置,但它返回一個空數組,因爲日期格式不正確匹配。

app.filter('publishFilter', function() { 

    return function(items) { 

    var newItems = []; 

    var currentDate = new Date(); 

    angular.forEach(items, function(item) { 
     if (item <= currentDate) { 
     newItems.push(item); 
     } 
    }); 

    return newItems; 
    } 
}); 
+1

當你做日期比較時,你需要將'item'這個字符串轉換爲日期。即嘗試'如果(新日期(項目)<= currentDate){' – PSL

+0

它看起來像遍歷每個數字並將它們存儲在數組[[1,2,1,9,2 「,」0「,」1「,」4「] – byrdr

+0

這可能是因爲物品不是您認爲的物品。你有沒有嘗試console.log項目?另外你如何消費這個過濾器? – PSL

回答

0

比較日期時嘗試將雙方轉換爲日期。假設項目是代表日期的字符串列表嘗試: -

app.filter('publishFilter', function() { 

    return function(items) { 

    if(!angular.isArray(items)) return []; 

    var currentDate = new Date(); 
    currentDate.setHours(0,0,0,0); //Just normalize the time offset, since item is just time. 

    return items.filter(function(item){ 
     return new Date(item) <= currentDate; 
    }); 
    } 
}); 
+0

我已添加我的模板。這也返回了空數組。 – byrdr

+0

當然,你做錯了。 '{{blo.date | publishFilter}}'您只向過濾器提供了一個日期字符串。現在我很困惑你在做什麼? – PSL

+0

也許這在控制器中比在過濾器中更好。我是以這種錯誤的方式去做的。我試圖限制提供給ng-repeat的結果。我仍然需要相同的邏輯,我只是​​在控制器中猜測。 – byrdr

0

如果您使用momentJS庫,這可以更安全,更簡單地完成。對時間進行編程就像編程對付金錢一樣,你應該儘可能輕鬆地進行編程,並且會在你的代碼中引入業務邏輯錯誤。

_.forEach(items, function(item){ 
    if(moment().isBefore(moment(item){ 
     //do something 
    } 
)}