第何ほげ曜日を求める

最終日曜日がくせもの、と書かれているブログを見たので、書いてみる。
簡単だよねぇ?



最終日曜日とかを求めるUWSCスクリプト

ついでに第何ほげ曜日も求めるという役割もあったんだろうけど、そのブログでは、月内のほげ曜日を全て列挙してた。
でも、最終ほげ曜日が欲しいなら、こうじゃないかな?

GETTIME(0,b)	// 基準日の日付収集(当日なら「0,b」不要)。月末算出のため
m=G_TIME_MM
d=(G_TIME_YY*100+m+1+(m=12)*88)*100+1
GETTIME(-1,d)	// 翌月の前日=月末日の曜日取得
w=w-G_TIME_WW
GETTIME(w-1-(w>0)*7,d)	// 月末日の曜日からさらに戻る

これで、G_TIME_DDとかに日付が入ってます。
bが対象年月(月内の何日でも可)、wが曜日(UWSCなので、0:日曜〜6:土曜)
2013/5月の最終水曜日なら、

b=20130521	// 20135月なら何日でも良い
w=3	// 水曜日

で、上のスクリプトを呼ぶだけ。
関数化しても良いね。


当月末日を求める方法は、Linersさんが公式掲示板で書かれていたもの。

第1水曜日とかを求めるUWSCスクリプト

ちなみに、第何ほげ曜日は、こう。
上に加えて「n=1」とか第何の指定がある想定。

GETTIME(0,b)
d=1-G_TIME_DD
GETTIME(d,b)	// 月初日の曜日取得
w=w-G_TIME_WW
d=d+w+((w<0)+n-1)*7	// 第何分だけずらす
GETTIME(d,b)

「n=5」以上では、翌月以降になっているかもね。
それを危惧するなら、G_TIME_MMをチェックしてあげてね。