我有一个数组,希望根据今天(从过去的日期)开始的一年(仅限过去的一年)筛选出结果。我可以使用lodash和momentjs,因此请想象使用它们来帮助实现我的目标。如下所示,我只想在去年内将.gameScore与.reportDate一起使用。
我的数组看起来像这样...(因此它只应返回年初至今的第一个对象)
ntpd
我正在处理应该放在过滤器之后的数据:
0:{gameScore: "1", reportDate: "2018-05-09"}
1:{gameScore: "3", reportDate: "2017-06-12"}
感谢任何帮助。谢谢
答案 0 :(得分:2)
您可以使用 Array.filter()
method 并通过分别比较 years
,months
来过滤相关的日期然后 days
。
var result = observations
.filter(observation => {
return (
moment(observation.reportDate).year() == moment().subtract('years', 1).year() &&
(moment(observation.reportDate).month() > moment().subtract('years', 1).month() ||
moment(observation.reportDate).month() == moment().subtract('years', 1).month() &&
moment(observation.reportDate).days() >= moment().subtract('years', 1).days()))
||
(moment(observation.reportDate).year() == moment().year() &&
(moment(observation.reportDate).month() < moment().month() ||
moment(observation.reportDate).month() == moment().month() &&
moment(observation.reportDate).days() <= moment().days())
);
});
演示:
var observations = [{
gameScore: "1",
reportDate: "2018-05-09"
},
{
gameScore: "3",
reportDate: "2017-06-12"
}
];
var result = observations
.filter(observation => {
return (
moment(observation.reportDate).year() == moment().subtract('years', 1).year() &&
(moment(observation.reportDate).month() > moment().subtract('years', 1).month() ||
moment(observation.reportDate).month() == moment().subtract('years', 1).month() &&
moment(observation.reportDate).days() >= moment().subtract('years', 1).days()))
||
(moment(observation.reportDate).year() == moment().year() &&
(moment(observation.reportDate).month() < moment().month() ||
moment(observation.reportDate).month() == moment().month() &&
moment(observation.reportDate).days() <= moment().days())
);
});
console.log(result);
<script src="https://rawgit.com/moment/moment/2.2.1/min/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.js"></script>
答案 1 :(得分:0)
假设observations
包含这些对象,您可以像这样过滤它们:
var date = new Date();
date.setFullYear( date.getFullYear() - 1 );
observations.filter(x => {
return new Date(x.reportDate) - date > 0;
});
答案 2 :(得分:0)
使用momentjs会是这样:
_.filter(observations, o=> moment().add(-12, "months").isSameOrBefore(moment(o.reportDate)))
或者这个:
_.filter(observations, o=> !moment().add(-1, "year").isAfter(moment(o.reportDate)))
请注意,momentjs v2.11.0已添加isSameOrBefore
。从v2.0.0开始,有单独的功能isSame
和isBefore
,或者您可以取反isAfter
。在docs中查看更多信息。
var observations = [
{gameScore: "1", reportDate: "2018-05-09"},
{gameScore: "3", reportDate: "2017-06-12"}
];
var result = _.filter(observations, o=> moment().add(-12, "months").isSameOrBefore(moment(o.reportDate)));
console.log(result);
result = _.filter(observations, o=> !moment().add(-1, "year").isAfter(moment(o.reportDate)));
console.log(result);
<script src="https://rawgit.com/moment/moment/2.11.0/min/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.js"></script>
答案 3 :(得分:0)
您将获得去年的日期。然后对此进行过滤
喜欢
var dates = [
{gameScore: "1", reportDate: "2018-05-09"},
{gameScore: "3", reportDate: "2017-06-12"}];
var date = new Date();
date.setFullYear(date.getFullYear() - 1);
date.setHours(0,0,0,0)
var filteredDates = dates.filter( o=> new Date(o.reportDate) >= date);
console.log(filteredDates)
要获取过去的日期,您可以简单地从年份中减去,然后使用.setFullYear
,然后简单地比较日期
答案 4 :(得分:0)
首先,您必须获取日期的moment
对象,将其转换为unix时间戳,然后将其与当前时间的时间戳进行比较。
var date = moment("29-06-1995").unix();
var current = moment().unix;
var difference = current - date;
然后您可以查看差异是否大于一年
if(difference >= 31556926) {
return false;
} else {
return true;
}
此情况将在您的array.filter()
的回调中出现