1

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

4

2 回答 2

0

您可以使用以下方法解析 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
}
于 2015-02-20T22:20:34.563 回答
0

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

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

可以使用此链接获取详细信息。我发布了一个与此查询类似的单独问题。 我们能否将控制器中的 JSON 数据(MM/DD/YYYY 格式)与自定义过滤器中的今天日期进行比较,并在数组中显示过滤列表

于 2015-02-24T23:47:38.097 回答