使用moment.Js比较时间集

时间:2016-10-19 02:57:30

标签: javascript node.js momentjs

我已经定义了一套规则。

  var rules = [
    {
    time :  "12:00:00 pm",
    time1 :  "01:00:00 pm",
    value:0
    },
   {
    time :  "01:00:00 pm",
    time1 :  "02:00:00 pm",
    value:0
    }, 
    {
    time :  "02:00:00 pm",
        time1 :  "03:00:00 pm",
        value:0
    }, 
    {
    time :  "03:00:00 pm",
        time1 : "04:00:00 pm",
        value:0
    }, {
    time : "04:00:00 pm",
        time1 : "05:00:00 pm",
        value:0
    }
]

module.exports = rules;

现在我有一个数据数组,其中包括我希望将dats与这些规则进行比较的时间,并相应地增加rules数组中status的值。 我正在使用moment.Js进行比较但是它的isAfter()和isBefore函数对我来说并不适用。

  _.each(data, function(data){
            // this comes from database where data.start_time consists of time

            console.log(data.start_time); // Mon Oct 03 2016 12:40:36 GMT+0530 (India Standard Time)


            var d = moment(data.start_time).format("hh:mm:ss a");
            console.log(d); //12:40:36 pm

            _.each(rules, function(rule){
               console.log(rule.time); //12:00:00 pm

             if(moment(d).isAfter(rule.time))
             {
                // Not able to reach here tried both isAfter
                // isBefore everything.
                console.log("sasa");
             }
         })
       });

如果有更快或更好的方法来做这些比较,请你在下面留下一个要点。我也会检查一下。

2 个答案:

答案 0 :(得分:2)

我尝试调试你的代码并有一些观察 -

  1. 时刻(d).isAfter-在这里,时刻(d)没有一个名为" isAfter"的方法。这是一个奇怪的事情,因为它应该根据documentation使用此方法。我不得不像下面那样调用原型方法 -

    var protoType = moment(start_time).__proto__;
    var isafter = protoType.isAfter(rule.time);
    
  2. 但是,这导致了另一个问题 - 超出了最大调用堆栈大小( Stack Overflow ed; p)。

    1. 另外,当我不按照格式化方式格式化日期时(在调用isAfter方法之前),它可以正常工作。虽然我有一个rule.time变量的虚拟值。而且,我必须以相同的格式保留两个日期。
    2. 所以,根据观察结果,我建议你不要在比较之前通过格式化日期部分,因为我认为这是必需的。

答案 1 :(得分:0)

moment().isAfter()以及moment().isBefore()方法将采用以下格式输入。

    YYYY-MM-DD Or YYYY-MM-DD hh:mm:ss

在你的情况下,它是hh:mm:ss格式,因为它每次都返回false。如果你想使用这个方法,那么改变你的规则数组如下

var rules = [
    {
        time: "2016-10-03 12:00:00 pm",
        time1: "2016-10-03 01:00:00 pm",
        value: 0
    },
    {
        time: "2016-10-03 01:00:00 pm",
        time1: "2016-10-03 02:00:00 pm",
        value: 0
    }
]

格式化data.start_time如下

    var d = moment(data.start_time).format("YYYY-MM-DD hh:mm:ss a");

这将为您提供所需的结果。