在javascript中计算日期差异

时间:2014-11-16 12:05:20

标签: javascript date utc

我写下面的代码:

var _MS_PER_Day=24*60*60*1000;
var utc1 = Date.UTC(1900, 1, 1);
var utc2 = Date.UTC(2014,11,16);
var x = Math.ceil((utc2 - utc1) / _MS_PER_Day);
alert(x);

我想计算两个日期之间的日期差异。实际日期差异是41957但是在运行我的代码后我得到41956,少了一个日期。我的代码出了什么问题?

4 个答案:

答案 0 :(得分:4)

您的代码正在计算1900年2月1日到2014年12月16日之间的差异(41956 days)。 The value month should be between 0...11(其中0是1月)。更正月份数以获得expected result

var _MS_PER_Day = 1000 * 60 * 60 * 24;
var utc1 = Date.UTC(1900, 0, 1); // Jan 01, 1900
var utc2 = Date.UTC(2014, 10, 16); // Nov 16, 2014
var x = Math.ceil((utc2 - utc1) / _MS_PER_Day);
alert(x); // 41957

答案 1 :(得分:2)

这是上面的替代代码,它将为您提供41957。

var date1 = new Date("1/1/1900");
var date2 = new Date("11/16/2014");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays);

参考: Get difference between 2 dates in javascript?

答案 2 :(得分:1)

月份是0到11,0表示1月份。 您也可以使用getTime方法以毫秒为单位获取UTC时间戳。

var _MS_PER_Day = 1000 * 60 * 60 * 24;
var t1 = new Date(1900, 0, 1); // Jan 01, 1900
var t2 = new Date(2014, 10, 16); // Nov 16, 2014
var tdiff = Math.ceil((t2.getTime() - t1.getTime()) / _MS_PER_Day); // tdiff = 41957

http://www.w3schools.com/jsref/jsref_gettime.asp

答案 3 :(得分:0)

我认为你可以使用http://momentjs.com/ 它会给你最好的结果。

const a = new Date(YOUR_START_TIME),
      b = new Date()

let diff = moment([b.getFullYear(), b.getMonth(), b.getDate()])
  .diff(moment([a.getFullYear(), a.getMonth(), a.getDate()]), 'years', true)