使用Moment.js按“上个月”和“上周”单击时过滤对象数组
filter array of objects on click by 'last month' and 'last week' using moment.js
我有一个日期创建为 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
];
相关文章:
- 有可能过滤来自嵌入式YouTube的声音吗
- 为什么我的d3.jsselectAll+过滤器没有过滤
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- Angular:使用选择列表选择过滤代码中的对象
- 在单击时过滤 JSON
- 如何在BookshelfJS中通过加入来过滤结果
- 如何使用javascript过滤复杂的json对象
- 如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
- 过滤AngularJs中的数据
- 通过API调用过滤数据
- 使用angularjs内置过滤器过滤代码中的特定属性
- 在JavaScript中重构上个月的第一天和最后一天的代码(node.js)
- 如何在重建URL后从URL中传递过滤值,目的是使用Angular2和Typescript实现无限滚动
- 相对于角度控制器中的另一个阵列过滤阵列项目
- 如何在D3.js中绘制地图投影上的点,并使用范围滑块过滤数据
- 使用PHP通过HTML表单选项选择器过滤MYSQL结果
- 尝试过滤“;引号"基于'"类别“;使用流星&mongo
- Angular中的过滤和$http承诺
- 使用jquery grep过滤具有值数组的json对象
- 使用Moment.js按“上个月”和“上周”单击时过滤对象数组