Check if a Date is Valid in JavaScript

Aug 14, 2023

In JavaScript, a date is invalid if its valueOf() is NaN.

const date = new Date(NaN);
date.toString(); // 'Invalid Date'

This is tricky because date still looks like a valid date: it is still instanceof Date, etc. One way to check for an "Invalid Date" is to check if the date's valueOf() is NaN:

Number.isNaN(date.valueOf()); // true

const validDate = new Date('2022-06-01');
Number.isNaN(validDate.valueOf()); // false

Debugging Why a Date is Invalid

There are two common reasons for an "Invalid Date". The first is passing a value that JavaScript can't interpret as a date to the new Date() constructor as follows.

const badDate = new Date('foobar');
badDate.valueOf(); // NaN
badDate.toString(); // 'Invalid Date'

Invalid date strings aren't the only potential cause: passing in a numeric calculation that adds up to NaN also causes "Invalid Date".

const obj = {};

// 3 * obj.nonexistentProperty === undefined
const badDate2 = new Date(3 * obj.nonexistentProperty);
badDate2.valueOf(); // NaN
badDate2.toString(); // 'Invalid Date'

A valid date can become an invalid date due to date manipulation methods like setDate() and setHours(). For example:

const obj = {};

const badDate3 = new Date('2023-06-01');
// 3 * obj.nonexistentProperty === undefined
badDate3.setHours(3 * obj.nonexistentProperty);
badDate3.valueOf(); // NaN
badDate3.toString(); // 'Invalid Date'

Did you find this tutorial useful? Say thanks by starring our repo on GitHub!

More Fundamentals Tutorials