Search code examples
javascriptdatedatetimemomentjsticker

JavaScript Moment.js trying to get the difference between 2 datetimes


I am trying to get the difference between 2 datetimestamps which look like These:

2018-08-22 00:00:00 
2018-08-11 15:34:31

I want to Show the difference in time in days - Hours - minutes - seconds left.

So far I did this but it Always return NaN:

import moment from 'moment';

const calc = {

    render () {
        moment().format();
        this.calcDifference();
    },

    calcDifference() {
        let releaseDate = document.getElementById('release-at').value;
        let currentDate = document.getElementById('current-date').value;

        let ms = moment(
            releaseDate,
            "DD-MM-YYYY HH:mm:ss").diff(moment(currentDate,
            "DD-MM-YYYY HH:mm:ss")
        );
        let d = moment.duration(ms);
        let s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");

        console.log(ms);
        console.log(d);
        console.log(s);
    }

};

    calc.render();

Solution

  • on your calcDifference function, you can do something like this

    let releaseDate = moment('2018-09-22 00:00:00');
    let currentDate = moment('2018-08-11 15:34:31');
    
    const diff = releaseDate.diff(currentDate);
    const diffDuration = moment.duration(diff);
    
    console.log(`
      ${diffDuration.months()} months
      ${diffDuration.days()} days
      ${diffDuration.hours()} hours
      ${diffDuration.minutes()} minutes
      ${diffDuration.seconds()} seconds left!`);
    

    in case values from release-at and current-date elements have format DD-MM-YYYY HH:mm:ss, use

    let releaseDate = moment(document.getElementById('release-at').value, 'DD-MM-YYYY HH:mm:ss');
    let currentDate = moment(document.getElementById('current-date').value, 'DD-MM-YYYY HH:mm:ss');
    

    Here's a working codepen

    I hope it helps! :)