Dibish Dibish - 1 year ago 91
Javascript Question

Moment js date time comparison

Am using moment js to format my date time, here i have two date value, and i want achieve a particular function when one date is greater than other. I read most of their docs but didn't find out the function to achieve this. I know it will be there, please help me to find it out, Thanks

This is my code

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date

var now = new Date(),
dnow = moment(now).tz('UTC'),
snow = dnow.minute() % 15,
diffnow = 15 - snow,
tonow = moment(dnow).add('minute', diffnow),
ahead30now = moment(tonow).add('minute', 30);

if (d > ahead30now) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {



var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
console.log('is after true');
} else {
console.log('is after is false');

Here am comparing two dates ie 2014-03-24T01:15:000> 2014-03-24T01:14:000, expecting first one is greater than second one, but it always go to else condition. I dont know why ?

Answer Source

I believe you are looking for the query functions, isBefore, isSame, and isAfter.

But it's a bit difficult to tell exactly what you're attempting. Perhaps you are just looking to get the difference between the input time and the current time? If so, consider the difference function, diff. For example:

moment().diff(date_time, 'minutes')

A few other things:

  • There's an error in the first line:

    var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'

    That's not going to work. I think you meant:

    var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';

    Of course, you might as well:

    var date_time = '2013-03-24T10:15:20:12Z';
  • You're using: .tz('UTC') incorrectly. .tz belongs to moment-timezone. You don't need to use that unless you're working with other time zones, like America/Los_Angeles.

    If you want to parse a value as UTC, then use:


    Or, if you want to parse a local value and convert it to UTC, then use:


    Or perhaps you don't need it at all. Just because the input value is in UTC, doesn't mean you have to work in UTC throughout your function.

  • You seem to be getting the "now" instance by moment(new Date()). You can instead just use moment().


Based on your edit, I think you can just do this:

var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');

Or, if you would like to ensure that your fields are validated to be in the correct format:

var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD  HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');