Вот функция для проверки правильности строки даты, учитывая также формат:
function chkdate(datestr,formatstr){
if (!(datestr && formatstr)) {return false;}
var splitter = formatstr.match(/\-|\/|\s/) || ['-']
,df = formatstr.split(splitter[0])
,ds = datestr.split(splitter[0])
,ymd =[0,0,0]
,dat;
for (var i=0;i<df.length;i++){
if (/yyyy/i.test(df[i])) {ymd[0] = ds[i];}
else if (/mm/i.test(df[i])) {ymd[1] = ds[i];}
else if (/dd/i.test(df[i])) {ymd[2] = ds[i];}
}
dat = new Date(ymd.join('/'));
return !isNaN(dat) && Number(ymd[1])<=12 && dat.getDate()===Number(ymd[2]);
}
//usage (in your case)
var months = {january:1,february:2,march:3,april:4,may:5,
june:6,july:7,august:8,september:9,october:10,
november:11,december:12},
inputdateraw = 'february 29 2011'.split(' '),
inputdate = [months[inputdateraw[0]],
inputdateraw[1],
inputdateraw[2]].join(' ');
console.log(chkdate (inputdate, 'mm dd yyyy')); //=> false
См. Также этот SO-вопрос