暂时不向使用javascript Date

时间:2018-06-26 15:49:30

标签: javascript momentjs

我有一个方法,可以接受带有时间的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”。加减分钟声明没有影响。

我在这里想念什么或做错什么了?

4 个答案:

答案 0 :(得分:3)

请注意,add()subtract改变了原始时刻

add()

  

通过添加时间来改变原始时刻。

subtract

  

通过减去时间来计算原始时刻。

所以您必须使用clone()

此外,在最新版本的时刻中,第一个参数是要添加/减去的时间,第二个参数是表示您要添加时间的键的字符串 < / p>

答案 1 :(得分:2)

addsubtract首先花费时间,然后花费哪种时间,如documented here。此外,请确保为每次计算创建一个新的矩对象,因为它会使矩对象发生变化。

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

答案 2 :(得分:0)

您一直都在处理相同的矩对象,因此,在执行let localeTime = myDate.toLocaleString()时,您将拥有原始的矩对象。

您只需要创建一个新的矩对象即可,而无需还原所做的更改。

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

答案 3 :(得分:0)

我认为您需要立即使用https://momentjs.com/docs/#/query/is-between/ 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

我认为这应该有所帮助。