gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:35:31 26 4
gpt4 key购买 nike

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

我可以使用 new 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
}

关于javascript - 使用 new Date() 比较和过滤当前日期中 MM/DD/YYYY 格式的数据,同时从用户输入值中减去 new Date(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com