Detecting an "invalid date" Date instance in JavaScript
Here's how I would do it:
if (Object.prototype.toString.call(d) === "[object Date]") { // it is a date if (isNaN(d.getTime())) { // d.valueOf() could also work // date is not valid } else { // date is valid }} else { // not a date}
Update [2018-05-31]: If you are not concerned with Date objects from other JS contexts (external windows, frames, or iframes), this simpler form may be preferred:
function isValidDate(d) { return d instanceof Date && !isNaN(d);}
Instead of using new Date()
you should use:
var timestamp = Date.parse('foo');if (isNaN(timestamp) == false) { var d = new Date(timestamp);}
Date.parse()
returns a timestamp, an integer representing the number of milliseconds since 01/Jan/1970. It will return NaN
if it cannot parse the supplied date string.
You can check the validity of a Date
object d
via
d instanceof Date && isFinite(d)
To avoid cross-frame issues, one could replace the instanceof
check with
Object.prototype.toString.call(d) === '[object Date]'
A call to getTime()
as in Borgar's answer is unnecessary as isNaN()
and isFinite()
both implicitly convert to number.