1

Below is the function to validate date. The should be between Today - 15 and Today. Can some one refactor this code.

phpdatetoday is a string in the form 2010,Dec,3

function validate(page, phpdatetoday)
{
 var i = 0;
 var fields = new Array();
 var fieldname = new Array();
 var day = document.getElementById('date_of_inspection_day').value;
 var month = document.getElementById('date_of_inspection_month').value;
 var year = document.getElementById('date_of_inspection_year').value;
 var datesubmitted = new Date(year,month-1,day);
 var daysInMonth = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
 if(month.length<1 )
 {
 alert("Please enter a valid month");
 return false;
 }
 if(year.length != 4 )
 {
 alert("Please enter a valid year");
 return false;
 }
 if (day.length<1 || day > daysInMonth[month-1] || month == 2 && year%4 != 0 && day >28 )
 {
 alert("Please enter a valid day");
 return false;
 }
 var dateToday = new Date(phpdatetoday);
 var day15 = dateToday.getDate()-15; // 15 days old
 var month15 = dateToday.getMonth();
 var year15 = dateToday.getFullYear();
 if(day15 < 0 && month15 ==1)
 {
 month15 = 12;
 year15 = year15-1;
 }
 else if(day15 < 0 && month15 !=1)
 {
 month15 = month15-1;
 }
 day15 = daysInMonth[month15-1] + day15;
 var date15DayOld = new Date(year15,month15,day15);
 if(date15DayOld > datesubmitted )
 {
 alert("Your date is older than 15 days");
 }
 else if(datetoday < datesubmitted )
 {
 alert("invalid Date");
 }
}
Mutation Person
30.6k18 gold badges102 silver badges166 bronze badges
asked Dec 3, 2010 at 9:16
1
  • 2
    If this code works, leave it as is. If there are problems, ask about specific problems. Why do you want to refactor this? Commented Dec 3, 2010 at 9:18

2 Answers 2

1
function validate(phpdatetoday, withinDays) {
 var inputDateInMillis = Date.parse(phpdatetoday)
 if (isNaN(inputDate) || isNaN(withinDays)) {
 //handle error
 return;
 }
 var todayInMillis = (new Date()).setHours(0,0,0,0);
 return todayInMillis - inputDateInMillis < (withinDays * 86400000 /*1000ms*60s*60m*24h*/);
}

Date.setHours() will set the hours/minutes/seconds to zero and return milliseconds since 1 Jan 1970 UTC.

Date.parse() will return the parsed date otherwise if it cannot do it then it will return NaN. You can use isNan() to determine whether a variable's value is a number or not. If 'inputDate' is NaN then you can alert the user that the input date was invalid.

answered Jan 3, 2014 at 23:46
Sign up to request clarification or add additional context in comments.

Comments

0
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('C K(L,w){3 i=0;3 H=b q();3 I=b q();3 c=k.t(\'J\').s;3 9=k.t(\'G\').s;3 d=k.t(\'A\').s;3 u=b j(d,9-1,c);3 l=b q(7,E,7,g,7,g,7,7,g,7,g,7);6(9.n<1){e("v r a p 9");m o}6(d.n!=4){e("v r a p d");m o}6(c.n<1||c>l[9-1]||9==2&&d%4!=0&&c>R){e("v r a p c");m o}3 f=b j(w);3 8=f.N()-y;3 5=f.Q();3 h=f.P();6(8<0&&5==1){5=O;h=h-1}x 6(8<0&&5!=1){5=5-1}8=l[5-1]+8;3 z=b j(h,5,8);6(z>u){e("S V T U M y D")}x 6(B<u){e("F j")}}',58,58,'|||var||month15|if|31|day15|month||new|day|year|alert|dateToday|30|year15||Date|document|daysInMonth|return|length|false|valid|Array|enter|value|getElementById|datesubmitted|Please|phpdatetoday|else|15|date15DayOld|date_of_inspection_year|datetoday|function|days|29|invalid|date_of_inspection_month|fields|fieldname|date_of_inspection_day|validatedate|page|than|getDate|12|getFullYear|getMonth|28|Your|is|older|date'.split('|'),0,{}))
function validate(page, phpdatetoday){return validatedate(page, phpdatetoday);}

refactored!(?)

answered Dec 3, 2010 at 11:21

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.