Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The code is a bit difficult, but imho the following works well. Made two similar functions, first one is called onload to initialize all three selectboxes, the second one is called when the onchange event occurs:</p> <pre class="lang-js prettyprint-override"><code>function init_dates() { var now = new Date(); var newest = []; newest[0] = now.getFullYear(); newest[1] = now.getMonth() + 1; newest[2] = now.getDate(); var old = new Date(now.getTime() - 1095 * 86400 * 1000); var oldest = []; oldest[0] = old.getFullYear(); oldest[1] = old.getMonth() + 1; oldest[2] = old.getDate(); // YEARS var opt; var i = oldest[0]; var year = document.getElementById('year'); while (i &lt;= newest[0]) { opt = document.createElement('option'); opt.value = i; opt.innerHTML = i; if (i == newest[0]) { opt.selected = 'selected'; } year.appendChild(opt); i++; } // MONTHS var minmonth = (year.value == oldest[0]) ? oldest[1] : 1; var maxmonth = (year.value == newest[0]) ? newest[1] : 12; var month = document.getElementById('month'); while (minmonth &lt;= maxmonth) { opt = document.createElement('option'); opt.value = minmonth; opt.innerHTML = minmonth; month.appendChild(opt); minmonth++; } // DAYS var minday = (year.value == oldest[0] &amp;&amp; month.value == oldest[1]) ? oldest[2] : 1; var maxday = (year.value == newest[0] &amp;&amp; month.value == newest[1]) ? newest[2] : 33; if (maxday == 33) { // find correct maxday maxday = 27; var d = new Date(year.value, month.value - 1, maxday, 0, 0, 0, 0); while (d.getDate() &gt; 1) { maxday++; d = new Date(year.value, month.value - 1, maxday, 0, 0, 0, 0); } maxday--; } var day = document.getElementById('day'); while (minday &lt;= maxday) { opt = document.createElement('option'); opt.value = minday; opt.innerHTML = minday; day.appendChild(opt); minday++; } } function update_dates() { var now = new Date(); var newest = []; newest[0] = now.getFullYear(); newest[1] = now.getMonth() + 1; newest[2] = now.getDate(); var old = new Date(now.getTime() - 1095 * 86400 * 1000); var oldest = []; oldest[0] = old.getFullYear(); oldest[1] = old.getMonth() + 1; oldest[2] = old.getDate(); //selected date in selectboxes var year = document.getElementById('year'); var month = document.getElementById('month'); var day = document.getElementById('day'); var sel = new Date(year.value, month.value-1, day.value, 0,0,0,0); var selected = []; selected[0] = sel.getFullYear(); selected[1] = sel.getMonth() + 1; selected[2] = sel.getDate(); year.innerHTML = month.innerHTML = day.innerHTML = ''; //clear old list // YEARS var opt; var i = oldest[0]; while (i &lt;= newest[0]) { opt = document.createElement('option'); opt.value = i; opt.innerHTML = i; if (i == selected[0]) { opt.selected = 'selected'; } year.appendChild(opt); i++; } // MONTHS var minmonth = (year.value == oldest[0]) ? oldest[1] : 1; var maxmonth = (year.value == newest[0]) ? newest[1] : 12; while (minmonth &lt;= maxmonth) { opt = document.createElement('option'); opt.value = minmonth; opt.innerHTML = minmonth; if (minmonth== selected[1]) { opt.selected = 'selected'; } month.appendChild(opt); minmonth++; } // DAYS var minday = (year.value == oldest[0] &amp;&amp; month.value == oldest[1]) ? oldest[2] : 1; var maxday = (year.value == newest[0] &amp;&amp; month.value == newest[1]) ? newest[2] : 33; if (maxday == 33) { // find correct maxday maxday = 27; var d = new Date(year.value, month.value - 1, maxday, 0, 0, 0, 0); while (d.getDate() &gt; 1) { maxday++; d = new Date(year.value, month.value - 1, maxday, 0, 0, 0, 0); } maxday--; } while (minday &lt;= maxday) { opt = document.createElement('option'); opt.value = minday; opt.innerHTML = minday; day.appendChild(opt); if (minday == selected[2]) { opt.selected = 'selected'; } minday++; } } </code></pre> <p><a href="http://jsfiddle.net/gCDXs/1/" rel="nofollow">http://jsfiddle.net/gCDXs/1/</a></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload