【问题标题】:Moment: Check to see if date was within the last 3 days时刻:检查日期是否在过去 3 天内
【发布时间】:2015-05-20 16:32:14
【问题描述】:

我正在尝试使用 moment 查看对象中的任何日期是否在当前日期的最后 3 天内。

对象的键是日期,但我不知道如何使用时刻将它们与当前日期进行比较。

编辑:我想查找过去 3 天内的日期的原因是要获取在该日期范围内发现的问题数量。如果我能获得一个布尔标志来确定商店中的对象是否在该日期范围内,我想我可以做到这一点。

这是我制作的小提琴的链接:http://jsfiddle.net/yx22qqvz/

var currentDate = moment().format('YYYY-MM-DD');
var store = {
    "2015-05-20": {
        "issues": 1 
    },
    "2015-05-18": {
        "issues": 2 
    },
    "2015-05-17": {
        "issues": 3 
    },
    "2015-05-16": {
        "issues": 1 
    }
};

console.log(currentDate, store);

for (var prop in store) {
    if ( store.hasOwnProperty(prop) ) {
        console.log(prop);  
        console.log( moment().diff(currentDate, 'days') > 3 );   
    }
}

【问题讨论】:

  • 我不知道时刻,但我认为实现这一点的最简单和最有效的方法是使用 (new Date()).getTime() 读取当前时间戳,减去 3 × 24 × 60 × 60 × 1000 并在每个时间戳上与相同的操作(减法除外)进行比较。

标签: javascript momentjs


【解决方案1】:

考虑:

// keep this as a moment, and use noon to avoid DST issues
var currentDate = moment().startOf('day').hour(12);

... 

      // parse the property at noon also
      var m = moment(prop + "T12:00:00");

      // diff the current date (as a moment), against the specific moment
      console.log(currentDate.diff(m, 'days') > 3);   

I've also updated your fiddle.

在您的旧代码中,您只是将当前时刻 (moment()) 与 currentDate 进行比较,这始终是 0 天。您必须解析有问题的属性才能比较该位数据。

使用中午可以避免在某些时区和某些浏览器中,将 DST 转换当天的午夜调整回前一天的 23:00 的问题。由于您使用的是整个日期,因此明确使用中午而不是午夜更安全。

【讨论】:

  • 这正是我要找的。也感谢您对时区的建议!
【解决方案2】:

我猜你想要

function some_within_three_days(store) {
    var three_days_ago = moment().subtract(3, 'days');
    function within_three_days(date) { return moment(date) . isAfter(three_days_ago); }
    return Object.keys(store) . some(within_three_days);
}

或类似的东西,具体取决于您的具体要求。

【讨论】:

  • 谢谢。我会试试这个。我编辑了这个问题,澄清了为什么我要在商店中查找过去 3 天内的物品。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多