不向从javascript日期创建的对象添加分钟的时刻
我有一个方法,它接受一个javascript日期和时间作为输入,并确定当前日期和时间是否在-30分钟之内。然而,当我在运行时调试它时,moment.add似乎并没有像预期的那样在几分钟内工作不向从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
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)是解决方案。