我们能否将控制器中的 JSON 数据(MM/DD/YYYY 格式)与自定义过滤器中的今天日期进行比较,并在数组中显示过滤列表

Can we compare JSON data(MM/DD/YYYY format) in controller with today's date in custom filter and display filtered list in array

我正在尝试将我们从 new Date() 获得的今天日期与 MM/DD/YYYY 格式的日期进行比较,并使用我的自定义过滤器过滤数组中的数据列表。有没有办法比较这个……我试过将小时数设置为 (0,0,0,0) 并进行比较,但它不起作用……我们也可以在 json 数据中设置小时数并进行比较吗? ..我的 javascript 看起来像这样..这是 plunker link。 http://plnkr.co/edit/unB6m8ZyqGnmiYfeaLoP?p=preview。我可以比较 id:4,5 但不能比较 1,2,3 因为日期格式不同...主要目的是根据用户输入显示最近几天的数据..有没有办法比较这两个日期并过滤所需的数据。

// Code goes here

var app = angular.module('tempfilter', []);

app.controller('MainCtrl', function($scope) {
  $scope.sensordata = [
    {id:'id:1',name:'Rob',Date:"5/11/2014","Temp":42},
  {id:'id:1',name:'Don',Date:"2015-05-11","Temp":42},
    {id:'id:2',name:'Bob',Date:"2015-02-22T17:16:14.720Z","Temp":50},
    {id:'id:3',name:'Tom', Date: new Date().getDate(),"Temp":60},
    {id:'id:4',name:'Sinclair',Date: new Date(),"Temp":65}

  ];
  
  $scope.filter = { value:16490 };
    
});

app.filter('tempo', function() {
    return function( items, field, value) {
      var filtered = [];
      var epoch = new Date(); // today!
      epoch.setHours(0,0,0,0);
      
      epoch.setDate(epoch.getDate()-value);
      
      angular.forEach(items, function(item) {
        if (item[field]>epoch){
          filtered.push(item);
        }
      });
      return filtered;
    };
});

我想你可以使用日期的 getTime() 方法。例如: var today = new Date().getTime() var jsonDate = new Date("2015-02-20").getTime() 然后根据需要比较 today 和 jsonDate。 getTime() 函数 returns 自 1970/01/01 以来的毫秒数。希望对您有所帮助。

旁注:我不知道 angular.js。

正如 Anand 所说,您尝试过 Date.getTime() 吗? new Date() 可以为您的所有示例生成一个 Date 对象,使用 getTime() 您可以获得毫秒数,因此您可以更轻松地进行比较。

您可能希望在创建 JSON 时获取 getTime,这样您就不需要每次都在循环中计算它。

应该看起来像:

// Code goes here

var app = angular.module('tempfilter', []);

app.controller('MainCtrl', function($scope) {
  $scope.sensordata = [
    {id:'id:1',name:'Rob',Date:"5/11/2014","Temp":42},
  {id:'id:1',name:'Don',Date:"2015-05-11","Temp":42},
    {id:'id:2',name:'Bob',Date:"2015-02-22T17:16:14.720Z","Temp":50},
    {id:'id:3',name:'Tom', Date: new Date().getDate(),"Temp":60},
    {id:'id:4',name:'Sinclair',Date: new Date(),"Temp":65}

  ];
  
  $scope.filter = { value:16490 };
    
});

app.filter('tempo', function() {
    return function( items, field, value) {
      var filtered = [];
      var epoch = new Date(); // today!
      epoch.setHours(0,0,0,0);
      
      epoch.setDate(epoch.getDate()-value);

      //HERE
      epoch = epoch.getTime();
      
      angular.forEach(items, function(item) {
        //HERE
        if (new Date(item[field]).getTime() > epoch){
          filtered.push(item);
        }
      });
      return filtered;
    };
});