獲取JavaScript中2個日期的區別?


Answers

更正確的解決方案

... 由於日期自然具有時區信息,這些信息可以跨越具有不同日光節省調整的地區

此問題的以前的答案未考慮所涉及的兩個日期跨夏令時(DST)更改的情況。 DST更改發生的日期將有一個以毫秒為單位的持續時間,即!= 1000*60*60*24 ,因此典型計算將失敗。

您可以通過首先將兩個日期標準化為UTC,然後計算這兩個UTC日期之間的差異來解決此問題。

現在,解決方案可以寫成,

var _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
  // Discard the time and time-zone information.
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

// test it
var a = new Date("2017-01-01"),
    b = new Date("2017-07-25"),
    difference = dateDiffInDays(a, b);

這工作,因為UTC時間從不觀察DST。 請參閱UTC是否遵守夏令時?

ps在討論關於這個答案的一些評論之後,一旦你理解了跨越DST邊界的javascript日期的問題,可能不僅僅有一種解決方法。 我上面提供的是一個簡單的(和測試過的)解決方案。 我很想知道是否有一個簡單的基於算術/數學的解決方案,而不必實例化兩個新的Date對象。 這可能會更快。

Question

這個問題在這裡已經有了答案:

我如何得到完整日期中的兩個日期之間的差異(我不希望有一天的任何分數)

var date1 = new Date('7/11/2010');
var date2 = new Date('12/12/2010');
var diffDays = date2.getDate() - date1.getDate(); 
alert(diffDays)

我嘗試了以上,但這沒有奏效。




var date1 = new Date("7/11/2010");
var date2 = new Date("8/11/2010");
var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24)); 

alert(diffDays )



這是從另一個日期中減去一個日期的代碼。 此示例將日期轉換為對象,因為除非是Date對象,否則getTime()函數將不起作用。

    var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);

                var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
                var diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay));
                alert(diffDays);





Related