- 締切済み
第3日曜日のみの日付を取得、セレクトボックスに
Javascriptで毎月の第3日曜日のみの日付を取得し、フォームのセレクトボックスに何件か表示できるようにしたいです。 調べて見て以前似たような記事を見つけたのですが、その記事は毎週土曜日のみで、それを毎月第3日曜日に限定することが自分には出来ませんでした。 http://okwave.jp/qa/q5738655.html ご教授頂けると嬉しいです。 どうぞよろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Ogre7077
- ベストアンサー率65% (170/258)
<form name=さあ選びたまえ><select name=今年の第三日曜を></select></form> <script> /** * 曜日指定で日付を生成します. * <pre> * makeDate(2014, 0, 1) // 一月一日 * makeDate(2014, 6, 'mon3') // 七月の第三月曜 * makeDate(2014, 11, 'sun-1') // 今年最後の日曜 * </pre> * @param {number} year 西暦年数 * @param {number} month 月数(0-11) * @param {number|string} day 数字または曜日文字列 * @return {Date} 生成した日付 */ function makeDate(year, month, day) { if (typeof day == 'string') { var W = 'sun,mon,tue,wed,thu,fri,sat'.split(/,/); var m = /([a-z]+)([\+\-]?\d+)/i.exec(day); var week = W.indexOf(m[1].toLowerCase()); var no = parseInt(m[2], 10); if (no < 0) { month++; } // 来月から逆算 if (no > 0) { no--; } // 第一を0と換算 var firstDay = new Date(year, month, 1); var delta = (7 + week - firstDay.getDay()) % 7; day = 1 + delta + no*7; } return new Date(year, month, day); } addEventListener('DOMContentLoaded', function(ev){ var year = new Date().getFullYear(); var element = document.forms['さあ選びたまえ'].elements['今年の第三日曜を']; for (var m = 0; m < 12; m++) { var date = makeDate(year, m, 'sun3'); var opt = element.appendChild(document.createElement('option')); opt.textContent = date.toLocaleDateString(); opt.value = date.toDateString(); } }, false); </script>
- yambejp
- ベストアンサー率51% (3827/7415)
第三日曜は21から、14日の曜日(日曜=0,月曜=1・・)を引いた日にち たとえば今月から2年分(24カ月)表示するなら <script> var d=new Date(); d.setDate(14); for(var i=0;i<24;i++){ document.write(d.getFullYear()+"年"+(d.getMonth()+1)+"月"+(21-d.getDay())+"日<br>"); d.setMonth(d.getMonth()+1); } </script>
- babu_baboo
- ベストアンサー率51% (268/525)
びみょう <!DOCTYPE html> <meta charset="utf-8"> <body> <form id="hoge"> <p> <select id="fuga"></select> </form> <script> function getNoWeek (date, no, week) { var d = new Date (date.getFullYear (), date.getMonth (), 1); return (d.setDate (((week + 7) - d.getDay ()) % 7 + (no * 7 - 6)), d); } function getDai3Sunday (date) { return getNoWeek (date, 3, 0); } function createDateRangeByMonth (date, begin, end) { var result = [ ]; var d = new Date (date.getFullYear (), date.getMonth (), 1); d.setMonth (d.getMonth () + begin); for (var i = begin; i < end; i++) result.push (new Date (d)), d.setMonth (d.getMonth () + 1); return result; } function toString (date) { return date.toString (); } function toStringJp (date) { function padding (num) { return (num < 10 ? '0': '') + num; } return [ date.getFullYear (), padding (date.getMonth () + 1), padding (date.getDate ()) ].join ('-'); } function createOptions (text, value) { return text.reduce (function (frg, t, i) { frg.appendChild (new Option (t, value[i])); return frg; }, document.createDocumentFragment ()); } //____________________ var sun = createDateRangeByMonth (new Date, 0, 10).map (getDai3Sunday); document.querySelector ('#fuga').appendChild ( createOptions (sun.map (toStringJp), sun.map (toString))); </script> </body>
- TooManyBugs
- ベストアンサー率27% (1472/5321)
15日~21日で日曜を探す。