Last updated: Feb 29, 2024
Reading timeยท5 min

To compare two dates:
Date() constructor to create 2 Date objects.getTime() method on the dates.const dateStr1 = '2022-04-24'; const dateStr2 = '2022-09-21'; const date1 = new Date(dateStr1); const date2 = new Date(dateStr2); if (date1.getTime() === date2.getTime()) { console.log('dates are the same'); } else { // โ This runs ๐๏ธ (dates are NOT the same) console.log('dates are not the same'); } if (date1.getTime() > date2.getTime()) { console.log('date1 comes after date2'); } else if (date1.getTime() < date2.getTime()) { // โ This runs ๐๏ธ (date2 comes after) console.log('date2 comes after date1'); } else { console.log('dates are the same'); }

We passed the date strings to the Date()
constructor to create 2 Date objects.
If passing the date string to the Date() constructor doesn't return a valid
date, then you have to format your date strings differently, e.g. YYYY-MM-DD
(more on that below).
The getTime method returns a timestamp of the elapsed milliseconds between the 1st of January 1970 00:00:00 and the given date.
We compared 2 dates - the 24th of April, 2022 and the 21st of September 2022.
In our first if statement, we check if the date strings point to the same
year, month and day of the month, which is not the case, so our else block
runs.
In the second example, the else if block runs because the second date comes
after the first.
It should be noted that you don't have to explicitly call the getTime() method
when comparing the dates.
const dateStr1 = '2022-04-24'; const dateStr2 = '2022-09-21'; const date1 = new Date(dateStr1); const date2 = new Date(dateStr2); if (date1 > date2) { console.log('date1 comes after date2'); } else if (date1 < date2) { // โ This runs ๐๏ธ (date2 comes after) console.log('date2 comes after date1'); } else { console.log('dates are the same'); }

getTime() method on each date.Which approach you pick is a matter of personal preference.
I've also written a detailed article on how to convert a string to a Date object in TS.
If you have difficulties creating a valid Date object from your date
strings, you can pass 2 types of parameters to the Date() constructor:
YYYY-MM-DDTHH:mm:ss.sssZ, or just
YYYY-MM-DD, if you only have a date without time.year, month (0 =
January to 11 = December), day of the month, hours, minutes and
seconds.Here is an example that splits a string and passes the parameters to the
Date() constructor to create a Date object.
// ๐๏ธ Formatted as MM/DD/YYYY const str = '07/21/2022'; const [month, day, year] = str.split('/'); // ๐๏ธ Create valid Date object const date = new Date(+year, +month - 1, +day); console.log(date); // ๐๏ธ Thu Jul 21 2022
The date string is formatted as mm/dd/yyyy, but the approach applies to any
other format.
We split the string on each forward slash to get an array of substrings.
const str = '07/21/2022'; // ๐๏ธ ['07', '21', '2022'] console.log(str.split('/'))
We used array destructuring to assign the month, day and year values to
variables and passed them to the Date() constructor.
Once the Date object is created, all you have to do to compare the dates is
compare the output from their getTime methods.
const str = '07/21/2022'; // ๐๏ธ ['07', '21', '2022'] console.log(str.split('/')); const [month, day, year] = str.split('/'); // ๐๏ธ Create valid Date object const date = new Date(+year, +month - 1, +day); console.log(date); // ๐๏ธ Thu Jul 21 2022 const now = new Date(); if (date.getTime() > now.getTime()) { console.log('date is in the future'); }
Notice that we subtracted 1 from the month when passing it to the Date()
constructor.
This is because, the Date constructor expects a zero-based value, where
January = 0, February = 1, March = 2, etc.
I've also written a detailed guide on how to format date/time in TS.
To compare dates without time:
setUTCHours() method to set the time on the copied dates to
midnight.getTime() method on the dates.const date1 = new Date('2022-01-23T06:55:31.820Z'); const date2 = new Date('2022-01-23T09:30:24.820Z'); const date1WithoutTime = new Date(date1.getTime()); const date2WithoutTime = new Date(date2.getTime()); date1WithoutTime.setUTCHours(0, 0, 0, 0); date2WithoutTime.setUTCHours(0, 0, 0, 0); if (date1WithoutTime.getTime() === date2WithoutTime.getTime()) { // โ This runs ๐๏ธ (dates are the same) console.log('dates are the same'); } else { console.log('dates are not the same'); } if (date1WithoutTime.getTime() > date2WithoutTime.getTime()) { console.log('date1 comes after date2'); } else if (date1WithoutTime.getTime() === date2WithoutTime.getTime()) { // โ This runs ๐๏ธ (dates are the same) console.log('date1 and date2 are the same'); } else { console.log('date2 comes after date1'); }

We used the
Date()
constructor to create 2 Date objects that both store the 23rd of January 2022.
The
setUTCHours
method takes the hours, minutes, seconds and milliseconds as parameters
and sets the values on the given date according to Universal Time.
const date1 = new Date('2022-01-23T06:55:31.820Z'); const date2 = new Date('2022-01-23T09:30:24.820Z'); const date1WithoutTime = new Date(date1.getTime()); const date2WithoutTime = new Date(date2.getTime()); date1WithoutTime.setUTCHours(0, 0, 0, 0); date2WithoutTime.setUTCHours(0, 0, 0, 0);
setUTCHours method mutates the Date object in place, which might not be what you want.This is why we used the getTime method to get a timestamp of the elapsed milliseconds between the 1st of January 1970 00:00:00 and the given date.
We can pass the timestamp to the Date() constructor to create a copy of the
Date object.
setUTCHours method to set the time for the dates to midnight, so we could compare the dates ignoring the time.The getTime method returns a number that represents the milliseconds elapsed
between the Unix Epoch and the given date.
// ๐๏ธ 1642944933161 console.log(new Date().getTime());
If we have two dates that store the same year, month and day of the month, then the timestamps are going to be equal because we set the time on both dates to midnight.
You can compare the output from getTime() just like you would compare numbers
in JavaScript.
Here is an example where date1 stores the 23rd of February 2022 and date2
stores the 27th of April 2022.
const date1 = new Date('2022-02-23T06:55:31.820Z'); const date2 = new Date('2022-04-27T09:30:24.820Z'); const date1WithoutTime = new Date(date1.getTime()); const date2WithoutTime = new Date(date2.getTime()); date1WithoutTime.setUTCHours(0, 0, 0, 0); date2WithoutTime.setUTCHours(0, 0, 0, 0); if (date1WithoutTime.getTime() === date2WithoutTime.getTime()) { console.log('dates are the same'); } else { // โ This runs ๐๏ธ (dates are NOT the same) console.log('dates are not the same'); } if (date1WithoutTime.getTime() > date2WithoutTime.getTime()) { console.log('date1 comes after date2'); } else if (date1WithoutTime.getTime() === date2WithoutTime.getTime()) { console.log('date1 and date2 are the same'); } else { // โ This runs ๐๏ธ (date2 comes after date1) console.log('date2 comes after date1'); }
The value in the date2 variable comes after the one in the date1 variable,
therefore its timestamp is a greater number, so the else statement runs in
both conditionals.
You can learn more about the related topics by checking out the following tutorials: