シフト勤務の昼、夜、休日を表示するカレンダー ページを作成しています。
7日休み、4泊、3日休み、1日休み、3泊、3日休み、4日、28日というサイクルが繰り返されます。サイクルは常に金曜日に始まります。
4 つの異なるクルーがいて、それぞれが 1 週間おきに開始します。
したがって、最初の乗組員の 7 オフの最初の 28 日間サイクルの月、日、年だけを含む sql テーブルがあり、それをコレクションに吸い込み、フィールドを追加して、他の乗組員の開始 7 オフを計算します。
カレンダーは、休日、夜、日を色分けして表示します。そのため、リストを調べて、サイクルの最初の日を次の配列へのインデックスとして使用します。
static int[] DaysArray = new int[28] {0,0,0,0,0,0,0,2,2,2,2,0,0,0,1,1,1,0,2,2,2,0,0,0,1,1,1,1}; // 0 - day off, 1 - days, 2 - nights
私が興味を持っているのは、月の始まりが 28 日サイクルのどの時点であるかを判断することだけであり、残りの日を適切な色で色付けするだけです。これが私が苦労しているルーチンです:
protected int GetDayNightOff(int day)
{
day--;
day -= 28;
day = Math.Abs(day);
day--;
return DaysArray[day];
}
サイクルの初日が 1 日である場合、インデックス 0 を使用して開始色を表示します。2 番目: インデックス 27; 3 番目: インデックス 26 など。簡単な解決策があることは知っていますが、頭を悩ませているようには見えません。
誰かが助けてくれることを願っています。