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月不起作用,还是我一直在使用弃用的代码?
答案 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"
。
因此,当您比较d
和startdatearr[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());