1

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

我想过滤上周和上个月的数组

问题是如果今天是 3 月 19 日,我要从 11 日到 18 日搜索过去 7 天,这似乎是通过计算 24 小时 * 7 来搜索过去 7 天,我的搜索需要从 00:00 开始:01 每天。

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

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

4

3 回答 3

6

日期应该是:

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) ;
                       });
于 2016-01-27T17:44:30.297 回答
2

我确实喜欢这个..它对我有用..

_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

角度过滤器库链接在这里

谢谢大家的支持。。

于 2016-01-28T06:36:34.340 回答
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');

在这一点之后,数字比较非常方便。

于 2016-01-27T13:40:50.537 回答