Javascript 确定本地日期时间是否在日期时间窗口内
我正在编写代码,以确定当前本地日期时间是否在日期时间范围内,即开始日期时间和结束日期时间 首先,我将开始和结束日期时间值作为序列化的GMT字符串获取(这是源系统返回给我的): 然后,我将日期时间转换为UTC格式:Javascript 确定本地日期时间是否在日期时间窗口内,javascript,date,datetime,time,Javascript,Date,Datetime,Time,我正在编写代码,以确定当前本地日期时间是否在日期时间范围内,即开始日期时间和结束日期时间 首先,我将开始和结束日期时间值作为序列化的GMT字符串获取(这是源系统返回给我的): 然后,我将日期时间转换为UTC格式: let startDate = new Date(myStartDate).toUTCString(); let endDate = new Date(myEndDate).toUTCString(); let now = new Date().toUTCString(); 然后我检
let startDate = new Date(myStartDate).toUTCString();
let endDate = new Date(myEndDate).toUTCString();
let now = new Date().toUTCString();
然后我检查now
是否在startDate
和endDate
之间:
if (now > startDate && now < endDate) {
console.log("You're INSIDE the datetime window!");
} else {
console.log("You're OUTSIDE the datetime window!");
}
console.log("Now: " + new Date(now));
console.log("Start: " + new Date(startDate));
console.log("End: " + new Date(endDate));
这似乎可行,但我不明白为什么不能用同样的方法计算
toutString()
。无需转换为字符串,您可以比较日期对象本身。进行此类比较时,日期对象转换为数字(相当于getTime())
由于每个字符串的时区偏移量相同,并且您的原始字符串已经是UTC,因此UTC在比较中并不真正相关
请注意,对于==
或=由于对象相等规则,代码>比较需要转换为getTime()
让myStartDate=新日期(“2020-09-11T14:15:13.000Z”);
让myEndDate=新日期(“2020-09-15T01:09:34.000Z”);
让今天=新日期();
console.log(今日>=myStartDate&&today无需转换为字符串,您可以比较日期对象本身。进行此类比较时,日期对象将转换为number(相当于getTime())
由于每个字符串的时区偏移量相同,并且您的原始字符串已经是UTC,因此UTC在比较中并不真正相关
请注意,由于对象相等规则,对于==
或!=
比较需要转换为getTime()
让myStartDate=新日期(“2020-09-11T14:15:13.000Z”);
让myEndDate=新日期(“2020-09-15T01:09:34.000Z”);
让今天=新日期();
console.log(今天>=myStartDate&&today嗯
toutString
仅使用UTC tz转换时间字符串。
包括JavaScript在内的大多数语言都不知道如何将字符串转换为可比较的日期
让我们做一个思考练习:
什么更大,“1”或“2”?“2”
什么更大,“a”或“b”?“b”
什么更大,“a”或“a”?“a”字符串更大
toutString
仅使用UTC tz转换时间字符串。
包括JavaScript在内的大多数语言都不知道如何将字符串转换为可比较的日期
让我们做一个思考练习:
什么更大,“1”或“2”?“2”
什么更大,“a”或“b”?“b”
什么更大,“a”或“a”?“a”字符串更大toutString()的输出应该是字符串?我希望在进行范围比较时不首选数字或日期值。@jidexl21更正,我错了,它不是字符串,而是数字类型((新日期()).toutString())
返回字符串。如果字符串采用ISO 8601格式,则无需转换为日期对象,字符串在词汇上的比较将与日期一样准确。如果使用SOString,字符串比较也会起作用,因为它将返回与解析相同的字符串,即新日期(“2020-09-11T14:15:13.000Z”).toISOString()==“2020-09-11T14:15:13.000Z”
@RobG我原本在修补toISOString()
,但我知道它现在已经被弃用了,所以使用了toutstring()
。toutstring()的输出
应该是字符串吗?我希望数字或日期值不是范围比较的首选值。@jidexl21正确,我说错了,它不是字符串,它是数字typeof((new date()).toutString())
返回字符串。如果字符串采用ISO 8601格式,则无需转换为日期对象,字符串在词汇上的比较将与日期一样准确。如果使用SOString,字符串比较也会起作用,因为它将返回与解析相同的字符串,即新日期(“2020-09-11T14:15:13.000Z”).toISOString()==“2020-09-11T14:15:13.000Z”
@RobG最初我正在修补toISOString()
,但我了解到它现在已被弃用,所以使用了toutstring()
。感谢您解释铸造部分,这将使它变得更容易(代码更少)。同样地,你可以从另一个结果中减去一个,也可以得到ms的差异。谢谢你解释铸造部分,这将使它更容易(代码更少)。同样地,你可以从另一个结果中减去一个,也可以得到ms的差异
if (now > startDate && now < endDate) {
console.log("You're INSIDE the datetime window!");
} else {
console.log("You're OUTSIDE the datetime window!");
}
console.log("Now: " + new Date(now));
console.log("Start: " + new Date(startDate));
console.log("End: " + new Date(endDate));
let startDate = new Date(myStartDate).getTime();
let endDate = new Date(myEndDate).getTime();
let now = new Date().getTime();