我有一个日期创建为 2015-12-11T11:12:14.635Z 来自数组中每个对象的数据库
我想过滤上周和上个月的数组
问题是,如果今天是 19 月 7 日,我要从 11 日到 18 日搜索过去 7 天,这似乎通过计算 7 小时 * 7 来搜索过去 7 天,我的搜索需要从每天 00:00:01 开始。
现在我首先想使用 moment 根据当前日期计算上周.js然后我会将其转换为上述格式,以便我可以过滤数据
基本上,我想根据当前时间戳计算上周。
日期应为:
var last7DayStart = moment().startOf('day').subtract(1,'week');
var lastMonthThisDay = moment().startOf('day').subtract(1,'month');
var yesterdayEndOfRange = moment().endOf('day').subtract(1,'day');
然后,如果它是一个JavaScript过滤器,我会使用Lodash并执行以下操作:
var javascriptArrayOfObjectsWithDates = [
{ date : '2015-12-11T11:12:14.635Z', anotherProperty: 0 },
{ date : moment().subtract(1, 'day' ).format(), testThis: 'works!'}
];
var filteredObjects = _.filter(javascriptArrayOfObjectsWithDates,
function(each){
return moment(each.date)
.isBetween(last7DayStart, yesterdayEndOfRange) ;
});
我确实喜欢这个..它对我有用..
_this.lastWeek = function () { var result = moment().subtract(7,'days').hours(0); return result._d; }; _this.lastMonth = function () { var result = moment().subtract(30,'days').hours(0); return result._d; };
然后我使用下划线JS过滤了我的数组。(您也可以使用负载灰)。
_this.thisWeekData = _.filter(_this.inbox, function(inbox) { return (moment(inbox.createdAt) > _this.lastWeek()); }); _this.lastWeekData = _.filter(_this.inbox, function(inbox) { return ((moment(inbox.createdAt) < _this.lastWeek()) && (moment(inbox.createdAt) > _this.lastMonth())); }); _this.lastMonthData = _.filter(_this.inbox, function(inbox) { return (moment(inbox.createdAt) < _this.lastMonth()); });
如果你不想在你的控制器中做所有这些事情,那么有用于各种过滤器的Angular库......你可以直接在HTML中使用它。"角度过滤器"
角度过滤器库链接在这里
谢谢你们的支持。
应该让你到达 7 天前的 00:00:00 的时间点
var time7daysAgo = moment().subtract(7,'days').startOf('day');
var time30daysAgo = moment().subtract(30,'days').startOf('day');
之后,您只需格式化为您喜欢的任何格式即可。对毫秒级 unix 时间戳说:
var time7daysAgoMiliseconds = time7daysAgo.format('x');
在这一点之后,数字比较非常方便。
这是我的过滤方式
- 今天
- 最近 7 天(包括上周)
- 最近 30 天(上个月,含)
const today = moment();
const lastSevenDays = moment().subtract(7, 'days');
const lastThirtyDays = moment().subtract(30, 'days');
const FILTER_MAP = {
All: () => true,
Today: task => task.timestamp.isBetween(today, today, 'day', '[]'), // [] means inclusive
Week: task => task.timestamp.isBetween(lastSevenDays, today, 'day', '[]'),
Month: task => task.timestamp.isBetween(lastThirtyDays, today, 'day', '[]'),
};
const DATA = [
{ id: "0", name: "Eat", timestamp: moment().subtract(6, 'days') },
{ id: "1", name: "Sleep", timestamp: moment() },
{ id: "2", name: "Pawn", timestamp: moment().subtract(28, 'days') },
{ id: "3", name: "Repeat", timestamp: moment().add(1, 'days') } //testing purpose + 1 day
];