2009年4月30日木曜日

第○何曜日を計算する

PHPで書かれていたものの移植です。y年m月の第nd曜日の date オブジェクトを返します。

-- y年m月の第nd曜日の date オブジェクトを返す。
on getWhatDayOfWeek(y, m, n, d)
 -- 指定した年月の1日の曜日を取得
 set f to current date
 set year of f to y
 set month of f to m
 set day of f to 1
 set dd to d - (weekday of f) + 1
 -- 1週間を足す
 if dd ≤ 0 then
  set dd to dd + 7
 end if
 set day of f to dd
 -- 第n曜日まで1週間を足し込み
 set day of f to (day of f) + (n - 1) * 7
 return f
end getWhatDayOfWeek

。例えば、2009年 4月の第二水曜日を得る場合は、以下のように使います。

my getWhatDayOfWeek(2009, 4, 2, Wednesday)

すると、以下のような date オブジェクトが返ります。時刻は無視してください。

date "2009年 4月 8日 水曜日 10:44:00 AM"

なお、valid でない日付を指定した場合でもそれなりに動いてしまいます。例えば、2009年 13月は2010年 1月と読み替えられます。また、2009年 4月の第5金曜日は 2009年 5月 1日が返ります。意図した結果となっているかどうかは、呼び出す側で確認してください。

0 件のコメント:

コメントを投稿