日期与时间之间的日期

Date between dates with time

本文关键字:日期 之间 时间      更新时间:2023-09-26

http://jsfiddle.net/7vzapm49/1/

var startdatearr = [new Date("04 Dec 2014 14:30:00").toUTCString(), new Date("07 Dec 2014 14:30:00").toUTCString()];
var enddatearr = [new Date("05 Dec 2014 14:30:00").toUTCString(), new Date("08 Dec 2014 14:30:00").toUTCString()];
var d = new Date().toUTCString();
for (i = 0; i < startdatearr.length; i++) {
    if (startdatearr[i] <= d && d <= enddatearr[i]) {
        alert("true");
    } else {
        alert("false");
    }
}

这段代码曾经有效,但突然间它不起作用,即使我今天检查日期,它似乎说 UTC 在 2014 年 12 月 4 日至 5 日之间,但它仍然返回 false。

代码在 12 月不起作用,还是我一直在使用已弃用的代码?

你必须把它变成毫秒,然后比较它。然后它将正常工作。到目前为止,您正在比较我认为遵循词法模式的字符串。

var startdatearr = [+new Date("04 Dec 2014 14:30:00"), +new Date("07 Dec 2014 14:30:00")];
var enddatearr = [+new Date("05 Dec 2014 14:30:00"), +new Date("08 Dec 2014 14:30:00")];
var d = +new Date();
for (i = 0; i < startdatearr.length; i++) {
    if (startdatearr[i] <= d && d <= enddatearr[i]) {
        alert("true");
    } else {
        alert("false");
    }
}

要再次将毫秒转换为日期,然后显示 UTC 字符串,您可以这样做

alert(new Date(d).toUTCString());
alert(new Date(startdatearr[0]).toUTCString());
alert(new Date(enddatearr[0]).toUTCString());

演示

好吧,您正在运行 ToString 风味方法。如果这以前有效,我怀疑它只对每次机会有效。因为startdatearr[i] <= d会检查字符串是否小于或等于。如果发生任何继承转换,那将是特定于浏览器/JS实现且不可靠的。

根据您的目标和对 UTC 的需求,可能有效的方法是删除对 .toUTCString() 的每个调用,只使用返回的 Date 对象,但这将被本地化为浏览器的时区(再次,取决于 JS 实现,但我假设浏览器正在运行此代码)。

在 UTC 日期中,字符串的第一部分是星期几。例如,UTC 中的"04 Dec 2014 14:30:00""Thu, 04 Dec 2014 13:30:00 GMT"

因此,当您比较dstartdatearr[i]时,大多数时候您只检查一周中的哪一天是按字母顺序排列的第一天。

因此,此代码可能有效或无效,具体取决于星期几。