本家掲示板で投稿したものです。
Fairfieldの公式と年齢算出式は
なぜそうなるのか細かな理屈を理解していないので、
自分自身の忘備用に残しておきます。
#module
#defcfunc getday int y,int m, int d ;Fairfieldの公式によるグレゴリオ暦換算
#defcfunc getday int y,int m, int d ;Fairfieldの公式によるグレゴリオ暦換算
return 365 * y + (y/4) - (y/100) + (y/400) + (306 * (m+1) / 10) + d - 428
#global
#global
mes "生年月日を入力(yyyymmdd)"
birthday=0 : input birthday,120,20,8
button "算出",*calc : stop
*calc
ty=gettime(0) : tm=gettime(1) : td=gettime(3)
by=birthday/10000 : bm=birthday\10000/100 : bd=birthday\100
today=ty*10000+tm*100+td : age=(today-birthday)/10000 ;年齢算出
if (bm*100+bd)-(tm*100+td)<1{cy=ty+1}else{cy=ty} ;今年の誕生日を迎えている
next_age=getday(cy,bm,bd)-getday(ty,tm,td) ;次の誕生日までの日数算出
dialog "今の年齢は"+age+"歳です。\n"+next_age+"日後に"+(age+1)+"歳になります。"
ちなみに、未来の日付を入力するとエラーは起きませんが、
正しい値を表示しないと思うのでそのあたりはご注意ください。