各位前輩好,我這邊在計算基礎上班時間
主要是想做一個請假的系統,但一開始在寫的時候覺得很正常
但寫著寫著覺得越寫越怪要判斷的東西好像越來越多
我就馬上跑去畫個邏輯圖出來發現好像要寫的東西有點多...
目前是依照朝八晚五上班時間,中午12點休息1小時且暫時不計算國定假日為基礎開發
所以我變數主要分成
YYYY1,MM1,DD1,HH1
YYYY2,MM2,DD2,HH2
Work,Off_Work,Break
除此之外還針對跨年或非跨年的情況寫case來判斷要計算的天數以利計算時間
用餘數來判斷2月是否29天
void DayCheck(int YM1, int YM2, int YM3)
{
switch (YM1)
{
case 0: MDay1 = 0; break;
case 1: MDay1 = 31; break;
case 2: MDay1 = 61; break;
case 3: MDay1 = 92; break;
case 4: MDay1 = 122; break;
case 5: MDay1 = 153; break;
case 6: MDay1 = 184; break;
case 7: MDay1 = 214; break;
case 8: MDay1 = 245; break;
case 9: MDay1 = 275; break;
case 10: MDay1 = 306; break;
case 11: MDay1 = 334; if (Y1 % 4 == 0) { MDay1 += 1; } break;
case 12: MDay1 = 365; if (Y1 % 4 == 0) { MDay1 += 1; } break;
}
switch (YM2)
{
case 0: MDay2 = 0; break;
case 1: MDay2 = 31; break;
case 2: MDay2 = 59; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 3: MDay2 = 90; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 4: MDay2 = 120; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 5: MDay2 = 151; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 6: MDay2 = 181; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 7: MDay2 = 212; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 8: MDay2 = 243; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 9: MDay2 = 273; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 10: MDay2 = 304; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 11: MDay2 = 334; if (Y2 % 4 == 0) { MDay2 += 1; } break;
case 12: MDay2 = 365; if (Y2 % 4 == 0) { MDay2 += 1; } break;
}
switch (YM3)
{
case 0: MDay3 = 0; break;
case 1: MDay3 = 31; break;
case 2: MDay3 = 59; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 3: MDay3 = 90; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 4: MDay3 = 120; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 5: MDay3 = 151; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 6: MDay3 = 181; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 7: MDay3 = 212; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 8: MDay3 = 243; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 9: MDay3 = 273; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 10: MDay3 = 304; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 11: MDay3 = 334; if (Y2 % 4 == 0) { MDay3 += 1; } break;
case 12: MDay3 = 365; if (Y2 % 4 == 0) { MDay3 += 1; } break;
}
}
請問有沒有比較快速的方式可以達到計算日期的方式
還是我繼續寫下去比較實際一些?
我之前寫過類似的判斷,我的步驟如下
1.建立一個行事曆table(一年365天,每天都要,用來記錄是否為上班日)
2.判斷請假當日是否為上班日(來源:行事曆table),是上班日,往(3)判斷;非上班日,請假時數=0
3.請假開始日的請假時數(是否請滿8小時),MAX=8(法定工時)
4.請假結束日的請假時數(是否請滿8小時),MAX=8(法定工時)
5.其餘請假日(扣除開始日及結束日),每日一定是8小時(法定工時)
6.(3)+(4)+(5)=請假時數