2014-12-04 185 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