不向从javascript日期创建的对象添加分钟的时刻

不向从javascript日期创建的对象添加分钟的时刻,javascript,momentjs,Javascript,Momentjs,我有一个方法,它接受一个javascript日期和时间作为输入,并确定当前日期和时间是否在-30分钟之内。然而,当我在运行时调试它时,moment.add似乎并没有像预期的那样在几分钟内工作 function isWithinRange(myDate: Date){ // convert to Moment obj let myMoment = moment(myDate); let todayMoment = moment(new Date()); let m

我有一个方法,它接受一个javascript日期和时间作为输入,并确定当前日期和时间是否在-30分钟之内。然而,当我在运行时调试它时,moment.add似乎并没有像预期的那样在几分钟内工作

function isWithinRange(myDate: Date){
    // convert to Moment obj
    let myMoment = moment(myDate);
    let todayMoment = moment(new Date());

    let myMomentOk = myMoment.isValid();
    let todayOk = todayMoment.isValid();

    // create range values
    let preTime = myMoment.subtract('m', 30);
    let postTime = myMoment.add('m', 30);

    //check values are as expected
    let localeTime = myDate.toLocaleString();]
    let preLocale = preTime.toLocaleString();
    let postLocale = postTime.toLocaleString();

    let result = todayMoment.isBetween(preTime, postTime);
    return result;
}

但是,当我在运行时检查localeTime、preLocale和postLocale时间时,所有三个值都是相同的,“Tue Jun 26 2018 09:58:00 GMT-0400”。加法和减法分钟语句没有影响


我在这里遗漏了什么或做错了什么?

add
subtract
首先计算时间量,然后计算时间类型。同时确保为每次计算创建一个新的力矩对象,因为它会改变力矩对象

let preTime = moment(myMoment).subtract(30, 'm');
let postTime = moment(myMoment).add(30, 'm');
请注意,和都会改变原始时刻

:

通过添加时间来改变原始力矩

:

通过减去时间来改变原始力矩

所以你必须使用


此外,在moment的最新版本中,第一个参数是加/减的时间量,第二个参数是表示要加什么时间的关键字符串,您一直在处理同一个moment对象,因此,您在执行
时拥有原始的矩对象,让localeTime=myDate.toLocalString()

您只需要创建一个新的力矩对象,这样就不会恢复更改

...
// create range values
let preTime = moment(myMoment).subtract('m', 30);
let postTime = moment(myMoment).add('m', 30);
...

我想你现在需要使用的是
isBetween
方法

const testDate = moment()
testDate.isBetween(moment().subtract(30, 'm'), moment().add(30, 'm'))
// true

const testDate = moment().add(2, 'h');
testDate.isBetween(moment().subtract(30, 'm'), moment().add(30, 'm'))
// false

我想这应该会有帮助。

谢谢您的回复。根本问题是,我假设add将返回新值,而不是更改原始对象。但事实恰恰相反。克隆或瞬间(myMoment)是解决方案。