日期与时间之间的日期

时间:2014-12-04 15:21:02

标签: javascript date

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月不起作用,还是我一直在使用弃用的代码?

3 个答案:

答案 0 :(得分:1)

好吧,您正在运行ToString flavor方法。如果以前有效,我怀疑它只是偶然发挥作用。因为startdatearr[i] <= d一直在检查字符串是否小于或等于。如果发生任何继承转换,那将是特定于浏览器/ JS实现并且不可靠。

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

答案 1 :(得分:1)

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

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

所以这段代码可能有效或无效,取决于星期几。

答案 2 :(得分:1)

您必须将其设置为毫秒,然后进行比较。然后它将正常工作。截至目前,你正在比较我认为遵循词汇模式的字符串。

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

DEMO