Angularjs 基于当前日期的角度过滤

Angularjs 基于当前日期的角度过滤,angularjs,angular-filters,Angularjs,Angular Filters,我有一个应用程序,它需要根据项目是否等于当前日期或过去来过滤项目。我的日期值格式为字符串,如“12/19/2014” 我有一个过滤器设置,但它返回一个空数组,因为日期格式不正确匹配 app.filter('publishFilter', function() { return function(items) { var newItems = []; var currentDate = new Date(); angular.forEach(items, f

我有一个应用程序,它需要根据项目是否等于当前日期或过去来过滤项目。我的日期值格式为字符串,如“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;
  }
});
app.filter('publishFilter',function(){
返回函数(项目){
var newItems=[];
var currentDate=新日期();
角度。forEach(项目、功能(项目){

如果(项在比较日期时尝试将两侧转换为日期。假设项是表示日期的字符串列表,请尝试:-

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;
    });
  }
});
app.filter('publishFilter',function(){
返回函数(项目){
如果(!angular.isArray(items))返回[];
var currentDate=新日期();
currentDate.setHours(0,0,0,0);//只需规范化时间偏移量,因为项就是时间。
返回项目。过滤器(函数(项目){

return new Date(item)如果您使用momentJS库,则可以更安全、更简单地完成此操作。针对时间编程与针对金钱编程非常相似,您应该轻描淡写,因为最轻微的错误都会将业务逻辑错误引入代码中

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

当您进行日期比较时,您需要将
item
这也是一个字符串转换为日期。例如,如果(新的日期(item))它看起来像是在每个数字上迭代,并将它们存储在数组[“1”、“2”、“1”、“9”、“2”、“0”、“1”、“4”]这可能是因为项不是您所认为的。您尝试过console.log项吗?您是如何使用此筛选器的?我添加了模板。这也返回了空数组。当然,您做得不对。
{{blo.date | publishFilter}
您只向筛选器提供了一个日期字符串。现在我不知道您想做什么?也许这在控制器中比作为筛选器更好。我的做法是错误的。我试图将提供的结果限制为ng repeat。我仍然需要相同的逻辑,我只是在控制器中猜测。@byrdr Yes do它在控制器中用于项目列表..除非您希望在每个摘要周期运行筛选器。在视图中,您通常会将其与ng repeat一起使用。基本上,您需要将筛选器与项目列表一起使用,而不是在单个项目上。因为在单个项目上没有任何需要筛选的内容。谢谢您的帮助。