I combined the best performance results I found around that check if a given object:
- is a Date instance (benchmark here)
- has a valid date (benchmark here)
The result is the following:
function isValidDate(input) {
if(!(input && input.getTimezoneOffset && input.setUTCFullYear))
return false;
var time = input.getTime();
return time === time;
};