我已经定义了一套规则。
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");
}
})
});
如果有更快或更好的方法来做这些比较,请你在下面留下一个要点。我也会检查一下。
答案 0 :(得分:2)
我尝试调试你的代码并有一些观察 -
时刻(d).isAfter-在这里,时刻(d)没有一个名为" isAfter"的方法。这是一个奇怪的事情,因为它应该根据documentation使用此方法。我不得不像下面那样调用原型方法 -
var protoType = moment(start_time).__proto__;
var isafter = protoType.isAfter(rule.time);
但是,这导致了另一个问题 - 超出了最大调用堆栈大小( Stack Overflow ed; p)。
所以,根据观察结果,我建议你不要在比较之前通过格式化日期部分,因为我认为这是必需的。
答案 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");
这将为您提供所需的结果。