2012-10-18 61 views
2

這是我發現的。 2012年10月4日午夜至10月5日午夜有25個小時。 也許在世界的某個地方有一個我不知道的dst?2012年10月4日至10月5日在JavaScript中有一個額外的小時

當你調用JavaScript的先天getTime: - 在IE和Mozilla。 - 這仍然在客戶端。 一天通常需要86400秒,而10月5日和4日之間的差額甚至是90000,即使是(一小時) - 2012年一年都不會。 - > 07/05/2011 - 10/05/2011作品... 2012它不。 -07/04/2012 - 10/04/2012作品。

這是code.the元件的摘錄格式中的「MM/DD/YYYY」

var fromDateElement = document.getElementById("filterFromDate"); 
    var toDateElement = document.getElementById("filterToDate"); 



    if (fromDateElement == null || fromDateElement.value == "" 
     || toDateElement == null || toDateElement.value == "") { 
     alert(dojoCallGetLocalizedMessage("please.enter.filter.dates")); 
     return false; 
    } 
    var fromArr = fromDateElement.value.split("/"); 
    var toArr = toDateElement.value.split("/"); 
    var timeSpread = (new Date(toArr[2],toArr[0],toArr[1]).getTime()) - 
      (new Date(fromArr[2],fromArr[0],fromArr[1]).getTime()); 
    if (timeSpread > <%= ONE_DAY_IN_MILLIS %>) { 
alert(dojoCallGetLocalizedMessage("not.a.day")); 
     return false; 
    } 
    return true; 

(一天中的毫秒時間被設定爲8.64億) 串此外,還有邏輯採取DST但不是在十月

+1

你可以在這兩個日期打印'new Date()。toString()'嗎?它會說它使用哪個時區。 –

+0

看到這個問題:http://stackoverflow.com/questions/12791378/get-the-most-recently-occurring-sunday –

回答

4

在JavaScript中,幾個月從0(1月)編號到11(十二月)—看到the MDN page for Date —所以一個月#10在11月,不十月。您需要從您的月數減去1

var timeSpread = (new Date(toArr[2],toArr[0]-1,toArr[1]).getTime()) - 
      (new Date(fromArr[2],fromArr[0]-1,fromArr[1]).getTime()); 

編輯補充任何非美國讀者的利益:在2012年11月4日,美國大部分地區將「回落」夏令時:在其他情況下是2:00 AM時,時鐘將恢復爲上午1:00。那一天實際上是25個小時。

+0

謝謝。認爲這是一個相關的事情。 ben franklin你造成了很多問題 – rcof

+0

@ user555075:不客氣!是的,本週我一直在處理一些痛苦的DST工作,所以我完全知道你的意思。 :-P – ruakh

相關問題