在从用户输入值中减去 new Date() 的同时使用 new Date() 从当前日期比较和过滤具有 MM/DD/YYYY 格式日期的数据

Compare and filter data with date in MM/DD/YYYY format from current date using using new Date() while subtracting new Date() from user input value

尝试将 2015-02-21T21:48:48.137Z 格式的新日期(今天的日期)与 MM/DD/YYYY 格式的日期进行比较,这是我的 json 数据。我想根据用户输入的天数过滤今天之前的所有数据(在没有特定天数之前获取数据)..我可以得到天数并从今天的日期中减去它。不知道如何将此日期与 MM/DD/YYYY 中的 Json 日期值进行比较 format.Should 我解析 Date() 以便与 MM/DD/YYYY 中的 JSON 数据进行比较] 格式

我可以使用新的 Date() 根据 2015-02-20T21:48:48.137Z 格式获取用户输入并从今天的日期中减去它。我的数据是 MM/DD/YYYY 格式,所以需要一种方法比较我减去 MM/DD/YYYY 格式的日期后得到的值。我是否需要更改过滤器中的参数并通过 ng-model 输入日期和值。

http://plnkr.co/edit/unB6m8ZyqGnmiYfeaLoP?p=preview

// Code goes here

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

app.controller('MainCtrl', function($scope) {
  $scope.sensordata = [{
    name: 'Rob',
    "Date": "2015-02-15",
    "Temp": 42
  }, {
    name: 'Bob',
    "Date": "2015-02-19",
    "Temp": 50
  }, {
    name: 'Tom',
    "Date": new Date().getDate(),
    "Temp": 60
  }, {
    name: 'Sinclair',
    "Date": new Date(),
    "Temp": 65
  }];
  $scope.filter = {
    value: 2
  };

});

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

    angular.forEach(items, function(item) {
      if (item[field] <= d) {
        filtered.push(item);
      }
    });
    return filtered;
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
<!DOCTYPE html>
<html ng-app="tempfilter">

<head lang="en">
  <meta charset="utf-8">
  <title>DateFilter</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <script src="script.js"></script>

</head>

<body ng-controller="MainCtrl">
  Number of days before today
  <input type="number" ng-model="filter.value">
  <p id="demo">Showing values lower than {{ filter.value }}</p>
  Filtered list:
  <ul>
    <li ng-repeat="s in sensordata | tempo:'Date':filter.value">{{s.Date|date:'MM/dd/yyyy'}} {{s.name}} {{s.Temp}}
    </li>
  </ul>

  Full List:
  <ul>
    <li ng-repeat="s in sensordata ">{{s.Date|date}} {{s.name}} {{s.Temp}}
    </li>
  </ul>
</body>

</html>

您可以使用以下方法解析 mm/dd/yyyy 中的日期:

function parseMDY(s) {
  var b = s.split(/\D/);
  return new Date(b[2], b[0]-1, b[1]);
}

请注意,IE 8 不支持解析 OP 中的格式,通常认为使用 Date 构造函数或 Date.parse 解析日期字符串是个坏主意。

此外,像 2015-02-15 这样的字符串在兼容 ES5 的浏览器中可能被解析为本地时间,而在符合 ed 的浏览器中可能被解析为 UTC。 6 草稿。

我不明白你用过:

!d.setDate(d.getDate() - value);

! 运算符似乎是多余的。

编辑

从 OP 来看,您似乎正在尝试解析像 2015 年 2 月 15 日这样的日期,为此您可以使用:

// Parse MM d, y
function parseMDY(s) {
  var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,
                jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
  var b = s.split(/[\s,]+/);
  return new Date(b[2], months[b[0].toLowerCase()], b[1]);
}

您可以获得当前日期 new Date(),但它也将包含当前时间。您可以将时间部分归零,减去所需的周期,然后进行比较。

例如如果您想过滤超过 2 天前的日期字符串:

// Start with the current date and time
var epoch = new Date();

// Set the time to 00:00:00.0
epoch.setHours(0,0,0,0);

// Subtract 2 days
epoch.setDate(epoch.getDate() - 2);

// Compare with string
if (epoch > parseMDY(dateString)) {
  // dateString is more than 2 days before epoch
}

当前日期与 JSON 数据中的日期比较有效。要将 JSON 日期与当前日期进行比较,我们可以使用 javascript .getTime() 方法,该方法 returns 1970 年 1 月 1 日午夜与指定日期之间的毫秒数。 http://www.w3schools.com/jsref/jsref_getTime.asp

我们可以通过对 JSON 数据使用 .getTime() 来使用相同的东西,并获得以毫秒为单位的所需时间并比较两个日期。虽然逻辑适用于 MM/DD/YYYY 向日期添加时间偏移可能是获得精确日期的好主意

可以使用此 link 获取详细信息。我发布了一个类似于此查询的单独问题。