我有一个方法,可以接受带有时间的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”。加减分钟声明没有影响。
我在这里想念什么或做错什么了?
答案 0 :(得分:3)
通过添加时间来改变原始时刻。
通过减去时间来计算原始时刻。
所以您必须使用clone()
此外,在最新版本的时刻中,第一个参数是要添加/减去的时间,第二个参数是表示您要添加时间的键的字符串 < / p>
答案 1 :(得分:2)
add
和subtract
首先花费时间,然后花费哪种时间,如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
我认为这应该有所帮助。