#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 = year, month, day
if year = 0 : kijun = 1900
return
#deffunc weekday int, int, int
mref year, 0 : mref month, 1 : mref day, 2
mref stt, 64
i = year - (month <= 2 * month), month + (month <= 2 * 12)
stt = i.0 + (i.0 / 4) - (i.0 / 100) + (i.0 / 400) + (i.1 * 13 + 8 / 5) + day \ 7
return
#deffunc getdays int , int, int
if kijun = 0 : dateinit
mref year, 0 : mref month, 1 : mref day, 2
mref stt, 64
i = 0
if year - kijun < 0 {
repeat kijun - year, year : i -= days + leapchk(cnt) : loop
if kijun.1 > 2 & leapchk(kijun) = 1 : i--
} else {
repeat year - kijun, kijun : i += days + leapchk(cnt) : loop
if kijun.1 > 2 & leapchk(kijun) = 1 : i--
}
if month - kijun.1 < 0 {
repeat kijun.1 - month, month : j = cnt \ 12 : i -= days.j : loop
if month > 2 & leapchk(year) = 1 : i++
} else {
repeat month - kijun.1, kijun.1 : j = cnt \ 12 : i += days.j : loop
if month > 2 & leapchk(year) = 1 : i++
}
stt = i + (day - kijun.2)
return
#deffunc weeknum int, int, int
mref y, 0 : mref m, 1 : mref d, 2
mref stt, 64
dateinit y, 1, 1
weekday y, 1, 1
w = stat
getdays y, m, d
stt = (w + stat) / 7 + 1
return
#global
randomize 2
repeat 10
rnd r.0, 200 : r.0 += 1900
rnd r.1, 12 : r.1++
rnd r.2, 28 : r.2++
weeknum r, r.1, r.2
mes "" + r + "年" + r.1 + "月" + r.2 + "日は" + stat + "週目です"
loop
stop
|