#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
#deffunc adddays array data, int day, local i
if kijun = 0 : dateinit
i = day
data = kijun, kijun.1, kijun.2
if i < 0 {
repeat -i / days
if i + days + leapchk(data) <= 0 : break
i += days + leapchk(data)
data--
loop
repeat
if data.2 + i > 0 : break
if data.1 > 1 : data.1-- : else : data-- : data.1 = 12
i += days(data.1) + (data.1 = 2 & leapchk(data))
loop
data.2 += i
} else {
repeat i / days
if i - days + leapchk(data) <= 0 : break
i -= days + leapchk(data)
data++
loop
if data.1 > 2 & leapchk(data) = 0 : i++
repeat
if data.2 + i <= days(data.1) + (data.1 = 2 & leapchk(data)) : break
i -= days(data.1) + (data.1 = 2 & leapchk(data))
if data.1 < 12 : data.1++ : else : data++ : data.1 = 1
loop
data.2 += i
}
return
#global
date = 2008, 2, 1
mes "基準:" + strf("%04d年", date) + strf("%02d月", date.1) + strf("%02d日", date.2)
dateinit date.0, date.1, date.2
randomize
repeat 20
r = rnd(10000) - rnd(10000)
adddays date, r
pos 10, cnt * 20 + 30 : mes strf("%d日後", r)
pos 100, cnt * 20 + 30 : mes strf("%04d年", date) + strf("%02d月", date.1) + strf("%02d日", date.2)
loop
|