2014-12-04 254 views
0

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月,但它仍然返回false。

该代码在12月份无法使用,或者我使用的是弃用的代码?

+0

呸,没有提醒我们所有的'警报()单曲就在前面。我总是尽可能使用'console.log()',除非我需要暂停我的代码,直到响应警报。 – philtune 2014-12-04 15:24:01

+0

我的不好!我习惯于随时随地发送提醒,因为将警报无处不在,可以帮助您找到代码无法运行的位置,我将修复小提琴! – user2524703 2014-12-04 15:24:50

回答

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

+0

像魔术一样工作,我不知道对方如何继续工作,但当我们进入十二月时,然后破裂,很奇怪。无论何时何地都适用?谢谢一堆! – user2524703 2014-12-04 15:35:34

+0

@ user2524703是。很高兴帮助你:) – 2014-12-04 15:49:35

1

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

什么可能的工作,这取决于你的目标和需求为UTC,再次删除每个调用.toUTCString(),只是使用Date对象返回,但是这将被定位于浏览器的时区(取决于JS实现,但我假设浏览器正在运行此代码)。

1

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

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

所以这段代码可能工作与否,取决于星期几。

+0

呃我猜想,大部分时间我都是在同一天使用的,例如从12月1日00:00:00到12月1日23:59:59,我想这意味着它仍然可以工作,第一或后面。 – user2524703 2014-12-04 15:36:31