Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定本地日期时间是否在日期时间窗口内_Javascript_Date_Datetime_Time - Fatal编程技术网

Javascript 确定本地日期时间是否在日期时间窗口内

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(); 然后我检

我正在编写代码,以确定当前本地日期时间是否在日期时间范围内,即开始日期时间和结束日期时间

首先,我将开始和结束日期时间值作为序列化的GMT字符串获取(这是源系统返回给我的):

然后,我将日期时间转换为UTC格式:

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();