!経過年月日の計算
SUB DateDiffYMD(y1,m1,d1, y2,m2,d2, y,m,d) !西暦y1年m1月d1日から基準日(西暦y2年m2月d2日)までの経過年月日を得る LET y=y2 !被減数と減数の大きさを考慮する LET m=m2 LET d=d2 IF d<d1 THEN !引けなければ、月から借りる LET m=m-1 IF m=0 THEN !その月の日数に換算する LET d=d+DayOfMonth(y,12) ELSE LET d=d+DayOfMonth(y,m) END IF END IF IF m<m1 THEN !引けなければ、年から借りる LET y=y-1 LET m=m+12 !その年の月数に換算する END IF LET y=y-y1 !実際に減算する LET m=m-m1 LET d=d-d1 END SUB
FUNCTION DayOfMonth(y,m) !西暦y年m月の日数を得る LET a=EOMonth(m) !平年 IF m=2 THEN LET a=a+IsLeapYear(y) !うるう年の補正 LET DayOfMonth=a END FUNCTION
!下位ルーチン FUNCTION IsLeapYear(y) !うるう年の判定 LET IsLeapYear=0 IF (MOD(y,4)=0 AND MOD(y,100)<>0) OR MOD(y,400)=0 THEN LET IsLeapYear=1 !うるう年 END FUNCTION
!定数 DATA 31,28,31,30,31,30,31,31,30,31,30,31 !各月の日数(平年) DIM EOMonth(12) MAT READ EOMonth !------------------------------ ここまでがサブルーチン
LET y1=2000 LET m1=2 LET d1=29
LET y2=2008 !Today LET m2=4 LET d2=1
CALL DateDiffYMD(y1,m1,d1, y2,m2,d2, y,m,d) !経過年月日 PRINT y;"年"; m;"ヶ月"; d;"日"
!別解 LET a=( (y2*100+m2)*100+d2 ) - ( (y1*100+m1)*100+d1 ) !yyyymmdd形式 LET y=INT(a/10000) !yyyy.mmdd PRINT y;"年"
END
!年齢計算に使用できるが、誕生日に加算されるため法律上の年齢にはなりません。 !基準日の+1などの工夫が必要です。
|