使用moment.js过滤“上个月”和“上周”点击的对象数组

时间:2016-01-27 13:00:35

标签: javascript angularjs filter momentjs angular-moment

我有一个dateCreated为2015-12-11T11:12:14.635Z来自数据库中的每个对象

我想在上周和上个月过滤该数组

问题是,如果今天是3月19日,我将在过去7天内从第11天到第18天进行搜索,并且似乎通过计算24小时来搜索最近7天* 7我的搜索需要从每天00:00:01。

现在我想先计算上周的第一个...基于当前日期使用moment.js然后我将它转换为上面的格式,以便我可以过滤数据

基本上,我想根据当前时间戳计算上周。

3 个答案:

答案 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

谢谢你们的支持..