アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javascriptで毎月の第3日曜日のみの日付を取得し、フォームのセレクトボックスに何件か表示できるようにしたいです。

調べて見て以前似たような記事を見つけたのですが、その記事は毎週土曜日のみで、それを毎月第3日曜日に限定することが自分には出来ませんでした。
http://oshiete.goo.ne.jp/qa/5738655.html

ご教授頂けると嬉しいです。
どうぞよろしくお願い致します。

A 回答 (4件)

<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>
    • good
    • 0

第三日曜は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>
    • good
    • 0

びみょう



<!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>
    • good
    • 0

15日~21日で日曜を探す。

    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!