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



我有一个方法,它接受一个以时间作为输入的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 时间时,所有三个值都是相同的,"星期二 Jun 26 2018 09:58:00 GMT-0400"。 加减会议纪要声明没有影响。

我在这里错过了什么或做错了什么?

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

add()

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

subtract

通过减去时间来改变原始时刻。

所以你必须使用clone()

此外,在最新版本的moment中,第一个参数是加/减的时间量,第二个参数是表示要添加的时间键的字符串

addsubtract首先需要时间量,然后是哪种类型的时间,如此处所述。还要确保为每个计算创建一个新的矩对象,因为它会改变矩对象。

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

你一直在处理同一个时刻对象,因此你在做let localeTime = myDate.toLocaleString()的时候就有了原始的时刻对象。

您只需要创建一个新的时刻对象,这样您就不会还原更改。

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

我认为您需要使用的是从现在开始使用 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

我认为这应该会有所帮助。

最新更新