This code validates the following:
enddate
should not be less than or equal tostartdate
.startdate
should not be less than or equal to the date today unlessdocument.getElementById("ltype").value == "1"
.- The maximum gap between
startdate
andenddate
is one year, more than that should cause an error alert.
Please review my code. I think I covered all test cases, but I am extremely new to JavaScript, so this code might have bugs. And is it fine to compare dates as strings? I did this because as far as I know HTML5 date is a string.
// creates a date object then converts it to a string with yyyy-mm-dd format
function dateFormat(date, addyear) { // addyear is boolean, true means add another year to the date
var dd = date.getDate();
var mm = date.getMonth()+1;
var yyyy = date.getFullYear();
if (addyear) {
yyyy++;
}
if(dd<10) {
dd='0'+dd;
}
if(mm<10) {
mm='0'+mm;
}
return yyyy+'-'+mm+'-'+dd;
}
function date_compare() {
var today = dateFormat(new Date(),false);
// from and to are html5 date fields
var d1=document.getElementById("from").value;
var d2=document.getElementById("to").value;
var startdate = dateFormat(new Date(d1),false);
var enddate = dateFormat(new Date(d2),false);
var yeardate = dateFormat(new Date(d1),true);
if (enddate <= startdate || enddate > yeardate) {
alert("Dates out of range");
return false;
}
if (document.getElementById("ltype").value != "1" && startdate <= today) {
alert("Error! date goes backwards!");
return false;
}
return true
}