I made a date selector in HTML, which accounts for leap years and the number of days in each month. I am relatively new to javascript / HTML so please critique it as much as possible.
<!DOCTYPE html>
<html>
<head>
<title>Date Selector</title>
</head>
<body>
<script>
function clear(select) {
for(var i = select.options.length - 1; i >= 0; i--) {
select.remove(i);
}
}
function createMonths() {
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var select = document.getElementById("month");
for(var i = 0; i < 12; i++) {
var option = document.createElement("option");
option.text = months[i];
select.add(option);
}
}
function createDays(days) {
var select = document.getElementById("day");
var index = select.options.selectedIndex;
if(index < 0) index = 0;
if(index >= days) index = days - 1;
clear(select);
for(var day = 1; day <= days; day++) {
var option = document.createElement("option");
option.text = day;
select.add(option);
}
select.options.selectedIndex = index;
}
function createYears(start, end) {
var select = document.getElementById("year");
for(var year = end; year >= start; year--) {
var option = document.createElement("option");
option.text = year;
select.add(option);
}
}
function leapYear(year) {
if(year % 400 == 0) return true;
if(year % 100 == 0) return false;
return year % 4 == 0;
}
function update() {
var month = document.getElementById("month").options.selectedIndex + 1;
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
createDays(31);
}
else if(month == 4 || month == 6 || month == 9 || month == 11) {
createDays(30);
}
else {
var options = document.getElementById("year").options;
var year = options[options.selectedIndex].text;
if(leapYear(year)) {
createDays(29);
}
else {
createDays(28);
}
}
}
window.onload = function() {
var today = new Date();
var year = today.getFullYear();
createMonths();
createDays(31);
createYears(year - 100, year);
};
</script>
<select id="month" onchange="update()"></select>
<select id="day"></select>
<select id="year" onchange="update()"></select>
</body>
</html>
return year % 4 === 0;
in theleapYear
method. \$\endgroup\$