я хочу вычислить разницу в дате в дни, часы, минуты, секунды, миллисекунды, наносекунды, как я могу это сделать? Пожалуйста, предложите.

, вы можете просто вычесть их, чтобы получить разницу в миллисекундах: Date объект Оттуда вы можете использовать простую арифметику для получения других значений.

var difference = date2 - date1;

Пример кода, взятый из

var DateDiff = {

    inDays: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000));
    },

    inWeeks: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000*7));
    },

    inMonths: function(d1, d2) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();

        return (d2M 12*d2Y)-(d1M 12*d1Y);
    },

    inYears: function(d1, d2) {
        return d2.getFullYear()-d1.getFullYear();
    }
}

var dString = "May, 20, 1984";

var d1 = new Date(dString);
var d2 = new Date();

document.write("<br />Number of <b>days</b> since " dString ": " DateDiff.inDays(d1, d2));
document.write("<br />Number of <b>weeks</b> since " dString ": " DateDiff.inWeeks(d1, d2));
document.write("<br />Number of <b>months</b> since " dString ": " DateDiff.inMonths(d1, d2));
document.write("<br />Number of <b>years</b> since " dString ": " DateDiff.inYears(d1, d2));

Другое решение — преобразовать разницу в новый объект Date и получить год этой даты (разница с 1970), месяц, день и т. Д. говорится, что Глядя на вывод

Таким образом, разница равна «3 года и 6 месяцев и 4 дня». Если вы хотите почувствовать разницу в удобочитаемом стиле, это может вам помочь.

var date1 = new Date(2010, 6, 17);
var date2 = new Date(2013, 12, 18);
var diff = new Date(date2.getTime() - date1.getTime());
// diff is: Thu Jul 05 1973 04:00:00 GMT 0300 (EEST)

console.log(diff.getUTCFullYear() - 1970); // Gives difference as year
// 3

console.log(diff.getUTCMonth()); // Gives month count of difference
// 6

console.log(diff.getUTCDate() - 1); // Gives day count of difference
// 4

Выражения типа «разница в днях» никогда не бывают такими простыми, как кажется. Если у вас есть следующие даты:

Выражения типа «разница в днях» никогда не бывает такой простой, как кажется. Если у вас есть следующие даты:

d1: 2011-10-15 23:59:00
d1: 2011-10-16 00:01:00

разница во времени составляет 2 минуты, должна ли «разница в днях» быть 1 или 0? Аналогичные проблемы возникают при любом выражении разницы в месяцах, годах и т. Д., Поскольку годы, месяцы и дни имеют разную продолжительность и разное время (например, день, когда начинается переход на летнее время, на 1 час короче обычного и на два часа короче дня, когда Это конец).

Вот функция для разницы в днях, которая игнорирует время, то есть для вышеуказанных дат она возвращает 1.

/*
   Get the number of days between two dates - not inclusive.

   "between" does not include the start date, so days
   between Thursday and Friday is one, Thursday to Saturday
   is two, and so on. Between Friday and the following Friday is 7.

   e.g. getDaysBetweenDates( 22-Jul-2011, 29-jul-2011) => 7.

   If want inclusive dates (e.g. leave from 1/1/2011 to 30/1/2011),
   use date prior to start date (i.e. 31/12/2010 to 30/1/2011).

   Only calculates whole days.

   Assumes d0 <= d1
*/
function getDaysBetweenDates(d0, d1) {

  var msPerDay = 8.64e7;

  // Copy dates so don't mess them up
  var x0 = new Date(d0);
  var x1 = new Date(d1);

  // Set to noon - avoid DST errors
  x0.setHours(12,0,0);
  x1.setHours(12,0,0);

  // Round to remove daylight saving errors
  return Math.round( (x1 - x0) / msPerDay );
}

Это может быть более кратким:

/*  Return number of days between d0 and d1.
**  Returns positive if d0 < d1, otherwise negative.
**
**  e.g. between 2000-02-28 and 2001-02-28 there are 366 days
**       between 2015-12-28 and 2015-12-29 there is 1 day
**       between 2015-12-28 23:59:59 and 2015-12-29 00:00:01 there is 1 day
**       between 2015-12-28 00:00:01 and 2015-12-28 23:59:59 there are 0 days
**        
**  @param {Date} d0  - start date
**  @param {Date} d1  - end date
**  @returns {number} - whole number of days between d0 and d1
**
*/
function daysDifference(d0, d1) {
  var diff = new Date( d1).setHours(12) - new Date( d0).setHours(12);
  return Math.round(diff/8.64e7);
}

// Simple formatter
function formatDate(date){
  return [date.getFullYear(),('0' (date.getMonth() 1)).slice(-2),('0' date.getDate()).slice(-2)].join('-');
}

// Examples
[[new Date(2000,1,28), new Date(2001,1,28)],  // Leap year
 [new Date(2001,1,28), new Date(2002,1,28)],  // Not leap year
 [new Date(2017,0,1),  new Date(2017,1,1)] 
].forEach(function(dates) {
  document.write('From '   formatDate(dates[0])   ' to '   formatDate(dates[1])  
                 ' is '   daysDifference(dates[0],dates[1])   ' days<br>');
});
<html lang="en">
<head>
<script>
function getDateDiff(time1, time2) {
  var str1= time1.split('/');
  var str2= time2.split('/');

  //                yyyy   , mm       , dd
  var t1 = new Date(str1[2], str1[0]-1, str1[1]);
  var t2 = new Date(str2[2], str2[0]-1, str2[1]);

  var diffMS = t1 - t2;    
  console.log(diffMS   ' ms');

  var diffS = diffMS / 1000;    
  console.log(diffS   ' ');

  var diffM = diffS / 60;
  console.log(diffM   ' minutes');

  var diffH = diffM / 60;
  console.log(diffH   ' hours');

  var diffD = diffH / 24;
  console.log(diffD   ' days');
  alert(diffD);
}

//alert(getDateDiff('10/18/2013','10/14/2013'));
</script>
</head>
<body>
  <input type="button" 
       onclick="getDateDiff('10/18/2013','10/14/2013')" 
       value="clickHere()" />

</body>
</html>

Использование Moment.js для всех ваших вычислений даты и времени, связанных с JavaScript

Ответ на ваш вопрос:

var a = moment([2007, 0, 29]);   
var b = moment([2007, 0, 28]);    
a.diff(b) // 86400000  

Подробную информацию можно найти говорится, что

function DateDiff(date1, date2) {
    date1.setHours(0);
    date1.setMinutes(0, 0, 0);
    date2.setHours(0);
    date2.setMinutes(0, 0, 0);
    var datediff = Math.abs(date1.getTime() - date2.getTime()); // difference 
    return parseInt(datediff / (24 * 60 * 60 * 1000), 10); //Convert values days and return value      
}

2 — это число цифр, до которого мы хотим округлить это число. в самой странице. , это просто:

moment("2016-04-08").fromNow();
var d1=new Date(2011,0,1); // jan,1 2011
var d2=new Date(); // now

var diff=d2-d1,sign=diff<0?-1:1,milliseconds,seconds,minutes,hours,days;
diff/=sign; // or diff=Math.abs(diff);
diff=(diff-(milliseconds=diff00))/1000;
diff=(diff-(seconds=diff`))/60;
diff=(diff-(minutes=diff`))/60;
days=(diff-(hours=diff$))/24;

console.info(sign===1?"Elapsed: ":"Remains: ",
             days " days, ",
             hours " hours, ",
             minutes " minutes, ",
             seconds " seconds, ",
             milliseconds " milliseconds.");

Извините, но расчет плоской миллисекунды ненадежен Спасибо за все ответы, но некоторые из опробованных мною функций тоже не работают 1. Дата рядом с сегодняшней датой 2. Дата 1970 или 3. Дата високосного года.

Подход, который лучше всего работает для меня и охватывает все сценарии, например високосный год, около 1970 года, 29 февраля и т. д.

var someday = new Date("8/1/1985");
var today = new Date();
var years = today.getFullYear() - someday.getFullYear();

// Reset someday to the current year.
someday.setFullYear(today.getFullYear());

// Depending on when that day falls for this year, subtract 1.
if (today < someday)
{
    years--;
}
document.write("Its been "   years   " full years.");

Если вы используете moment.js, то найти разницу в дате довольно просто.

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")
function DateDiff(b, e)
{
    let
        endYear = e.getFullYear(),
        endMonth = e.getMonth(),
        years = endYear - b.getFullYear(),
        months = endMonth - b.getMonth(),
        days = e.getDate() - b.getDate();
    if (months < 0)
    {
        years--;
        months  = 12;
    }
    if (days < 0)
    {
        months--;
        days  = new Date(endYear, endMonth, 0).getDate();
    }
    return [years, months, days];
}

[years, months, days] = DateDiff(
    new Date("October 21, 1980"),
    new Date("July 11, 2017")); // 36 8 20

Это то, как вы можете реализовать разницу между датами без рамки.

function getDateDiff(dateOne, dateTwo) {
        if(dateOne.charAt(2)=='-' & dateTwo.charAt(2)=='-'){
            dateOne = new Date(formatDate(dateOne));
            dateTwo = new Date(formatDate(dateTwo));
        }
        else{
            dateOne = new Date(dateOne);
            dateTwo = new Date(dateTwo);            
        }
        let timeDiff = Math.abs(dateOne.getTime() - dateTwo.getTime());
        let diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
        let diffMonths = Math.ceil(diffDays/31);
        let diffYears = Math.ceil(diffMonths/12);

        let message = "Difference in Days: "   diffDays   " "  
                      "Difference in Months: "   diffMonths  " "   
                      "Difference in Years: "   diffYears;
        return message;
     }

    function formatDate(date) {
         return date.split('-').reverse().join('-');
    }

    console.log(getDateDiff("23-04-2017", "23-04-2018"));