JavaScript - detecting invalid date
In this article, we're going to have a look at how to check if data is invalid in JavaScript.
Date correctness can be checked basing on internal state of Date
object.
Incorrect date object returns:
false
for callisFinite(myDate)
,true
for callisNaN(myDate)
,NaN
frommyDate.getTime()
method,- "
Invalid Date
" string fortoString()
method call.
Quick solution:
// ONLINE-RUNNER:browser;
var correctDate = new Date(2020, 10, 15);
var incorrectDate = new Date(NaN);
console.log( isFinite( correctDate ) ); // true
console.log( !isNaN( correctDate ) ); // true
console.log( isFinite( incorrectDate ) ); // false
console.log( !isNaN( incorrectDate ) ); // false
Look below to see different practical examples:
1. Date
object test example
This approach bases on fact: isFinite
method returns false
for incorrect dates.
// ONLINE-RUNNER:browser;
function isCorrectDate(date) {
return date instanceof Date && isFinite(date);
// return date instanceof Date && !isNaN(date);
}
// Usage example:
var correctDate = new Date(2020, 10, 15);
var incorrectDate = new Date(NaN);
console.log( isCorrectDate( correctDate ) ); // true
console.log( isCorrectDate( incorrectDate ) ); // false
2. getTime()
or other getter test example
This approach bases on fact: incorrect date returns NaN
values from getters. So we can make simple test for example with getTime()
method.
// ONLINE-RUNNER:browser;
function isCorrectDate(date) {
return date instanceof Date && isFinite(date.getTime());
// return date instanceof Date && !isNaN(date.getTime());
}
// Usage example:
var correctDate = new Date(2020, 10, 15);
var incorrectDate = new Date(NaN);
console.log( isCorrectDate( correctDate ) ); // true
console.log( isCorrectDate( incorrectDate ) ); // false
3. toString()
method test example
This approach is based on fact: incorrect date object returns "Invalid Date
" string for toString()
method call. It is good to call to string method with protoype
API that prevents for methods overriding.
// ONLINE-RUNNER:browser;
function isCorrectDate(date) {
if (date instanceof Date) {
var text = Date.prototype.toString.call(date);
return text !== 'Invalid Date';
}
return false;
}
// Usage example:
var correctDate = new Date(2020, 10, 15);
var incorrectDate = new Date(NaN);
console.log( isCorrectDate( correctDate ) ); // true
console.log( isCorrectDate( incorrectDate ) ); // false
4. Detecting correct date string or date object example
Example presented in this section allows to check correctness of date provided as string or object. String date should be formatetd according to one of the standards:
- IETF-compliant RFC 2822 timestamps,
- ISO 8601.
Run following code to see effect:
// ONLINE-RUNNER:browser;
function isCorrectDate(date) {
return isFinite(date instanceof Date ? date : new Date(date));
// return isFinite(date instanceof Date ? date : Date.parse(date));
// return !isNaN(date instanceof Date ? date : new Date(date));
// return !isNaN(date instanceof Date ? date : Date.parse(date));
}
// Usage example:
var date1 = '2020-10-15';
var date2 = '2020-10-x5'; // <-------- incorrect date
var date3 = 'This is not date'; // <-- incorrect date
var date4 = new Date(2020, 10, 15);
var date5 = new Date(NaN); // <------- incorrect date
console.log( isCorrectDate( date1 ) ); // true
console.log( isCorrectDate( date2 ) ); // false
console.log( isCorrectDate( date3 ) ); // false
console.log( isCorrectDate( date4 ) ); // true
console.log( isCorrectDate( date5 ) ); // false