〜 タイム 〜
月末日付を取得

月末の日付を取得するサンプルです。
各月の日数を配列に入れておくことで大体は取得できますが、
2月だけは「閏年の29日」と「平年の28日」に違いがありますので、全ての月を簡単に取り出せません。
尚、閏年かのチェックにはコチラと違って#defineマクロを使用しています。
コレにより、HSP2でも関数形式に記述することができますが、
文字列中においては、カッコを使用しての計算ができず、数式の中だけしか使用できません。
閏年の判定結果を文字列内にも入れる場合、一旦変数に代入するようにしてください。
また、dateinit命令をgetlastday命令内部で使用しており、
今回のサンプルにおいて、dateinit命令の基準年月日パラメータ指定は不要ですが、
他の日付系命令でも使える日付共通モジュール命令となっていますので、
そのまま何も指定せずに使ってください。(基準年月日指定しても影響はありません)
	

dateinit 基準年, 基準月, 基準日
基準年日付計算用の基準とする年を指定する。
基準月日付計算用の基準とする月を指定する。
基準日日付計算用の基準とする日を指定する。

getlastday 対象年, 対象月
対象年月末日の取得したい年を指定する。
尚、取得した月末日はstatに返る。
内部でdateinit命令を使用しているため、getlastdayより前にdateinit命令を定義すること。
対象月月末日の取得したい月を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#define global ctype leapchk(%1 = 1900) ((%1 \ 400 = 0) | ((%1 \ 4 = 0) & (%1 \ 100 ! 0)))
#module
#deffunc dateinit int, int, int
	mref year, 0 : mref month, 1 : mref day, 2
	days = 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
	kijun.0 = year, month, day
	if year = 0 : kijun = 1900
	return

#deffunc getlastday int, int
	if kijun = 0 : dateinit
	mref year, 0 : mref month, 1
	mref stt, 64
	stt = (month = 2) * leapchk(year) + days.month
	return
#global

	randomize
	repeat 25
		rnd y, 200 : y += 1900
		rnd m,  12 : m++
		getlastday y, m
		mes "" + y + "年" + m + "月は" + stat + "日間あります。"
	loop
	stop

dateinit 基準年, 基準月, 基準日
基準年日付計算用の基準とする年を指定する。
基準月日付計算用の基準とする月を指定する。
基準日日付計算用の基準とする日を指定する。

月末日 = getlastday(対象年, 対象月)
月末日取得した月末日の受取先を指定する。
尚、内部でdateinit命令を使用しているため、getlastdayより前にdateinit命令を定義すること。
対象年月末日の取得したい年を指定する。
対象月月末日の取得したい月を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#define global ctype leapchk(%1 = 1900) ((%1 \ 400 = 0) | ((%1 \ 4 = 0) & (%1 \ 100 ! 0)))
#module
#deffunc dateinit int year, int month, int day
	days = 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
	kijun = year, month, day
	if year = 0 : kijun = 1900
	return

#defcfunc getlastday int year, int month
	if kijun = 0 : dateinit
	return leapchk(year) * (month = 2) + days.month
#global

	randomize
	repeat 25
		y = rnd(200) + 1900
		m = rnd(12) + 1
		mes "" + y + "年" + m + "月は" + getlastday(y, m) + "日間あります。"
	loop