Как получить разницу в месяце, дате, часе, минуте и секунде между двумя датами?

Я пытаюсь получить разницу в месяце, дате, часе, минуте и секунде между двумя датами в JavaScript.

Я знаю, что мы можем получить разницу в дате в миллисекундах и уже пробовали следующее:

function showtime() {
    var date1 = new Date('7/14/2010 6:21:00');
    var date2 = new Date('12/15/2010 7:25:10');
    var diffTime = parseInt(date2 - date1);
    var diffMonth = Math.floor(diffTime / (1000 * 60 * 60 * 24 * 30));
    var diffDays = Math.floor((diffTime / (1000 * 60 * 60 * 24)) - (diffMonth * 30));
    var diffHour = Math.floor((diffTime / (1000 * 60 * 60)) - (diffMonth * 30 * 24) - (diffDays * 24))
    var diffMinute = Math.floor((diffTime / (1000 * 60)) - (diffMonth * 60 * 30 * 24) - (diffDays * 60 * 24) - (diffHour * 60))
    var diffSec = Math.floor((diffTime / (1000)) - (diffMonth * 60 * 60 * 30 * 24) - (diffDays * 60 * 60 * 24) - (diffHour * 60 * 60) - (diffMinute * 60))

    var result = (diffMonth + ' Month ' + diffDays + ' Days ' + diffHour + ' Hours ' + diffMinute + ' Minutes ' + diffSec + ' Sec' );

    return result;
}

Но вышеуказанная функция не может вычислить точные дни и месяцы. Любая помощь будет оценена по достоинству.


person Pawan Gupta    schedule 29.02.2020    source источник
comment
Вы имеете в виду вот так? codepen.io/manmur/pen/dyoRbLm   -  person Maniraj Murugan    schedule 29.02.2020


Ответы (2)


Вы делаете предположение, что во всех месяцах всего 30 дней, а это не так (diffMonth использует 30-дневный множитель) - это исказит количество дней.

person Naren    schedule 29.02.2020
comment
да, это единственная причина, по которой задан этот вопрос. - person Pawan Gupta; 29.02.2020
comment
В вопросе не было точно ясно, что нужно, поэтому я указал, почему количество дней может быть искажено. Однако расчет количества месяцев с количеством дней зависит от нескольких различных сценариев, например, если это високосный год, в месяце 30 или 31 день. Я думаю, что проверка этих вопросов может помочь вам и посмотреть, сможете ли вы опираться на них - stackoverflow.com/questions/2536379/ и stackoverflow.com/questions/17732897/ - person Naren; 03.03.2020

Попробуйте мой код:

let duration = Math.abs(date1 - date2) / 36e5;
let totalDuration = Math.round(duration * 10) / 10;

totalDuration = totalDuration.toString().replace('.', 'H : ') + 'M';
// 13H : 2M
person Farhan Yudhi Fatah    schedule 02.07.2020