【发布时间】:2020-09-13 20:47:20
【问题描述】:
我正在编写代码以确定当前本地日期时间是否在日期时间范围内,即开始和结束日期时间。
我首先将开始和结束日期时间值作为序列化的 GMT 字符串(这是源系统返回给我的):
let myStartDate = "2020-09-11T14:15:13.000Z";
let myEndDate = "2020-09-15T01:09:34.000Z";
然后我将日期时间转换为 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));
当我运行它时,我的代码告诉我我在日期时间窗口之外,即使开始和日期时间值是我当前日期时间前后几天。
我看到的另一种方法是使用 getTime(),它将日期时间转换为 UTC 毫秒数。
let startDate = new Date(myStartDate).getTime();
let endDate = new Date(myEndDate).getTime();
let now = new Date().getTime();
这似乎可行,但我很困惑为什么不能以同样的方式评估 toUTCString()。
【问题讨论】:
-
toUTCString()的输出应该是字符串?我希望数字或日期值不是范围比较的首选。 -
@jidexl21 正确,我记错了,不是字符串,是数字
-
typeof ((new Date()).toUTCString())返回字符串。 -
如果你的字符串是 ISO 8601 格式,你不需要转换为 Date 对象,字符串会像日期一样准确地进行词法比较。如果您使用 toISOString 字符串比较也将起作用,因为它会返回与您正在解析的字符串相同的字符串,即
new Date("2020-09-11T14:15:13.000Z").toISOString() === "2020-09-11T14:15:13.000Z"。 -
@RobG 我最初在修改
toISOString(),但我了解到它现在已被弃用,所以使用toUTCString()。
标签: javascript date datetime time