我有一个dateCreated为2015-12-11T11:12:14.635Z来自数据库中的每个对象
我想在上周和上个月过滤该数组
问题是,如果今天是3月19日,我将在过去7天内从第11天到第18天进行搜索,并且似乎通过计算24小时来搜索最近7天* 7我的搜索需要从每天00:00:01。
现在我想先计算上周的第一个...基于当前日期使用moment.js然后我将它转换为上面的格式,以便我可以过滤数据
基本上,我想根据当前时间戳计算上周。
答案 0 :(得分:3)
日期应该是:
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) ;
});
答案 1 :(得分:1)
这应该让你到达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');
答案 2 :(得分:0)
我确实喜欢这个..它为我工作..
_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; };
然后我使用underscoreJS过滤了我的数组..(你也可以使用loadash)..
_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()); });
如果您不想在控制器中执行所有这些操作,那么就会有各种滤镜的角度库..您可以直接在html中使用它。“ Angular-filter ”
angular-filter library link is here
谢谢你们的支持..