カレンダー計算のコア部分

NO IMAGE

■日付の算出方法
例えば2008年11月のカレンダーを計算するとします。
「日付選択」フィールド(グローバル、日付)に [ 2008/11/1 ] というデータを入れるとします。
カレンダーが日曜日スタートだとして、
「first_day」フィールド(計算、日付):
Case (
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "sunday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "monday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 1 ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "tuesday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 2 ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "wednesday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 3 ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "thursday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 4 ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "friday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 5 ;
DayName ( Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) ) = "saturday" ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) – 6 ;
Date ( Month ( 日付選択 ) ; 1 ; Year ( 日付選択 ) ) )
これでカレンダー上の最初の日が出てきます。
2008/11/01は土曜日ですから、その6日前、[ 2008/10/26 ] と算出されるというわけです。
次に6週間分の日曜日を算出します。
Case (
Get ( レコード番号 ) = 1 ; first_day ;
Get ( レコード番号 ) = 2 ; first_day + 7 ;
Get ( レコード番号 ) = 3 ; first_day + 14 ;
Get ( レコード番号 ) = 4 ; first_day + 21 ;
Get ( レコード番号 ) = 5 ; first_day + 28 ;
Get ( レコード番号 ) = 6 ; first_day + 35 ;
"")
これで、
[ 2008/10/26 ]
[ 2008/11/02 ]
[ 2008/11/09 ]
[ 2008/11/16 ]
[ 2008/11/23 ]
[ 2008/11/30 ]
が出てきました。
月曜日は簡単です。
日曜日 + 1
だけ。火曜日は「+2」、水曜日は「+3」……となります。