新しく発言する  EXIT  インデックスへ

日数計算


  日数計算 しばっち 2008/03/30 19:32:26 
  続き しばっち 2008/03/30 19:33:05 
   └西暦1年1月1日からの日数から西暦年月日に変... 山中和義 2008/04/01 12:02:19  (修正1回)
    ├!経過年月日の計算 山中和義 2008/04/01 16:09:28  (修正2回)
    └!日付関連のサブルーチン 山中和義 2008/04/02 15:36:28 
Re: 西暦1年1月1日からの日数から西暦年月日に変...  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/02 15:36:28
!日付関連のサブルーチン

!注意 1582年10月15日以降の現行のグレゴリオ暦に対応する。

FUNCTION WeekInYear(y) !西暦y年の週の数を得る ※52,53
LET WeekInYear=WeekNumber(y,12,31)
END FUNCTION

FUNCTION WeekNumber(y,m,d) !西暦y年m月d日は1月1日から第何週目にあるか計算する ※0,1〜52,53、前年の週の最後にある場合は、0
LET WeekNumber=Week(y,1,DayOfYear(y,m,d)) !※西暦y年1月の1日〜365,366日と解釈する
END FUNCTION

FUNCTION Week(y,m,d) !西暦y年m月の第何週目にあるか計算する ※週の始めは月曜日。前月の週の最後にある場合は、0
LET Week=INT((d+DayOfWeek(y,m,1)-2)/7)+1
END FUNCTION

FUNCTION DayOfYear(y,m,d) !西暦y年の1月1日からの日数を得る ※1〜365,366
LET DayOfYear=DateFrom111(y,m,d)-DateFrom111(y,1,1)+1
END FUNCTION

FUNCTION DayInYear(y) !西暦y年の日数を得る ※365,366
LET DayInYear=365+IsLeapYear(y)
END FUNCTION

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 DayOfWeek(y,m,d) !西暦y年m月d日の曜日を得る ※0なら日曜日、1なら月曜日、2なら火曜日、……、6なら土曜日
LET DayOfWeek=MOD(DateFrom111(y,m,d),7) !西暦1年1月1日を日曜日とする
END FUNCTION

FUNCTION DateDiff(y1,m1,d1, y2,m2,d2) !西暦y1/m1/d1〜y2/m2/d2間の日数を得る
LET DateDiff=DateFrom111(y2,m2,d2)-DateFrom111(y1,m1,d1)
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


FUNCTION DateFrom111(y,m,d) !西暦1年1月1日からの日数を得る ※グレゴリオ暦を線形的に拡張したものである。
LET yy=y-1 !年
LET a=yy*365+INT(yy/4)-INT(yy/100)+INT(yy/400)

FOR i=1 TO m-1 !月
LET a=a+EOMonth(i)
NEXT i
IF m>2 THEN LET a=a+IsLeapYear(y) !うるう年の補正

LET a=a+d !日

LET DateFrom111=a
END FUNCTION


!定数
DATA 31,28,31,30,31,30,31,31,30,31,30,31 !各月の日数(平年)
DIM EOMonth(12)
MAT READ EOMonth
!------------------------------ ここまでがサブルーチン

     └つづき(使用例、カレンダー) 山中和義 2008/04/02 15:38:11 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。