第二月曜日とか

今月の第二月曜日は何日?とかいうの。どの言語で記述するのが一番見やすいか悩んだので、意表をついてエクセルの関数でw

【前提】
A1に曜日を表す数字(セルの表示形式を「aaa」にして、「月」とかになるようにしとくとわかりやすいかも)
B1に「第二」の「二」の部分
A3に調べたい日付

【式】
=A3-DAY(A3)+(B1*7-1)-WEEKDAY(A3-DAY(A3)+(B1*7-1))+A1

【解説】
まず第X週目になりうる最大の日付を算出

  • > A3-DAY(A3)+(7*B1-1)

上記日付の属する週の「0日目」を算出

  • > A3-DAY(A3)+(7*B1-1)-WEEKDAY(A3-DAY(A3)+7*B1-1)

取得したい曜日分だけプラス

  • > A3-DAY(A3)+(7*B1-1)-WEEKDAY(A3-DAY(A3)+7*B1-1)+A1


一応PHPで書くとこんな感じ。

$xweek = 2;   // 第二週
$weekday = 1; // 月曜日

$yyyy = 2007;
$mm = 5;
$dd = 12;

$d = mktime(1, 0, 0, $mm, $dd, $yyyy);
$d = strtotime("-$dd day", $d);
$d = strtotime("+".($xweek*7-1)." day", $d);
$d = strtotime("+$weekday day", $d);

echo date("Y/m/d", $d);

参考
CodeZinePHP Tips:日付や時刻をパラメータとして扱う(Tips, PHP
http://codezine.jp/a/article/aid/33.aspx