moment.js add不会增加时间

时间:2016-06-02 14:24:50

标签: javascript time add momentjs

当我做的时候

----编辑----

var someMoment = moment('6:30 PM', ["h:mm A"]);

----结束编辑----

someMoment.add(30, 'minutes')  

我似乎没有得到任何结果。

console.log(start); -- Moment {_isAMomentObject: true, _i: "6:30 PM", _f: "h:mm A", _isUTC: false, _pf: Object…}
console.log(start.add(inc, 'minutes')); --Moment {_isAMomentObject: true, _i: "6:30 PM", _f: "h:mm A", _isUTC: false, _pf: Object…}

文档说添加会改变指定的时刻,所以上面应该有效但我也尝试了

var end = start.add(inc, 'minutes')
console.log(end); --Moment {_isAMomentObject: true, _i: "6:30 PM", _f: "h:mm A", _isUTC: false, _pf: Object…}

我能做的就是这个

console.log(start.add(inc, 'minutes').format("h:mm A")); --7:00 PM

我想要的是花一点时间,加上30分钟,最好有一个提前30分钟的新时刻,或者至少让最初时刻提前30分钟。

我知道我可以把格式输出并把它放在一个新的时刻,我想我会,但这似乎有点破碎。

----编辑----

使用时刻2.1

我从我的应用程序中的方法中得到这个,我还没有在jsfiddle或其他任何东西中隔离它,但该方法需要一个字符串和一个增量。我想我会把它贴在这里

这里我尝试了一种方式,但我也尝试过使用修改后的启动并克隆开始

var timeIsBetweenStartInc = function(_target:string, _start:string, inc:int){
var target = moment(_target, ["h:mm A"]);
var start = moment(_start, ["h:mm A"]);
console.log(start);
var end = moment(start).add(inc, 'minutes');
console.log(end);

return target.isBetween(start, end, 'minutes', '[)');(target, start, end);
};

----结束编辑----

3 个答案:

答案 0 :(得分:3)

我怀疑Moment.js的工作方式与您期望的完全一样,但是console.log不是。它打印对象的引用,因此您看到的状态是协商时的当前状态,而不是调用log()时的状态。尝试使用console.dir()来查看差异。或者使用JSON.stringify()来获取对象的字符串表示,或者在Moment对象上调用format()。

答案 1 :(得分:2)

Moment.js有一个clone方法,您可以这样使用:

var now = moment(),
    future = now.clone();

然后你可以为克隆时刻添加一些时间:

future.add(30, "minutes");

现在,如果你比较两个时刻的UNIX时间戳......

future.unix() - now.unix();

你会注意到它们是1800秒=相隔30分钟。

答案 2 :(得分:-1)

看起来您信任Moment对象(_i)的某些内部属性以包含调整后的时间。可能是懒惰地应用了操作,或者那些内部跟踪原始时间,但是一旦你实际对对象做了任何事情(比如在它上面调用.format()),它就会显示调整时间。

编辑:或者您使用的是Moment.js的过时版本。看起来版本1表现出与您所看到的相似的行为。但是,您可能正在查看最新的(v2)文档,因此文档与观察到的行为之间存在差异。

  

我想要的是花一点时间,加上30分钟,最好有一个提前30分钟的新时刻,或者至少提前30分钟。

var start  = moment();
var end    = moment(start).add(30, 'minutes');

console.log( start.toString() );
console.log(   end.toString() );