public void DataTimeMath() { if (drpHourStart.SelectedIndex == 0) drpMinuteStart.SelectedIndex = 1; //不可早於8點30,強制設定8點30為最早 if (drpHourEnd.SelectedIndex == 0) drpMinuteEnd.SelectedIndex = 1; //不可早於8點30,強制設定8點30為最早 if (txtDateStart.Text.Trim() == "") return; //沒有填寫日期不計算 if (txtDateEnd.Text.Trim() == "") return; //沒有填寫日期不計算 string strDate = "2000/01/01"; string strDateStart = txtDateStart.Text; //使用者填入的日期 string strDateEnd = txtDateEnd.Text; //使用者填入的日期 string strTimeStart = drpHourStart.SelectedItem.Text + ":" + drpMinuteStart.SelectedItem.Text + ":00"; //使用者選擇的時間 string strTimeEnd = drpHourEnd.SelectedItem.Text + ":" + drpMinuteEnd.SelectedItem.Text + ":00"; //使用者選擇的時間 //上下班時間設定、午休時間設定 TimeSpan 上班時間 = new TimeSpan(DateTime.Parse(strDate + " 08:30:00").Ticks); TimeSpan 下班時間 = new TimeSpan(DateTime.Parse(strDate + " 17:30:00").Ticks); TimeSpan 午休開始 = new TimeSpan(DateTime.Parse(strDate + " 12:00:00").Ticks); TimeSpan 午休結束 = new TimeSpan(DateTime.Parse(strDate + " 13:00:00").Ticks); TimeSpan t1 = new TimeSpan(DateTime.Parse(strDateStart + " " + strTimeStart).Ticks); TimeSpan t2 = new TimeSpan(DateTime.Parse(strDateEnd + " " + strTimeEnd).Ticks); double ts = t2.Subtract(t1).TotalHours; if (ts < 0) return; //起迄時間錯誤不計算 TimeSpan date1 = new TimeSpan(DateTime.Parse(txtDateStart.Text).Ticks); TimeSpan date2 = new TimeSpan(DateTime.Parse(txtDateEnd.Text).Ticks); double dates = date2.Subtract(date1).TotalDays; //跨越天數 double 請假時數 = 0; for (int i = 0; i <= dates; i++) { TimeSpan 請假開始 = new TimeSpan(DateTime.Parse(strDate + " " + strTimeStart).Ticks); Boolean 上午開始 = 午休開始.Subtract(請假開始).TotalHours >= 0 ? true : false; Boolean 下午開始 = 午休結束.Subtract(請假開始).TotalHours <= 0 ? true : false; TimeSpan 請假結束 = new TimeSpan(DateTime.Parse(strDate + " " + strTimeEnd).Ticks); Boolean 上午結束 = 午休開始.Subtract(請假結束).TotalHours >= 0 ? true : false; Boolean 下午結束 = 午休結束.Subtract(請假結束).TotalHours <= 0 ? true : false; if (i == 0 && i == dates) //同一天 { //請上午,請下午 if (上午開始 && 上午結束 || 下午開始 && 下午結束) { 請假時數 += 請假結束.Subtract(請假開始).TotalHours; } else //請整天,跨越午休 { if (上午開始) 請假時數 += 午休開始.Subtract(請假開始).TotalHours; if (下午結束) 請假時數 += 請假結束.Subtract(午休結束).TotalHours; } } else if (i == 0 && i < dates) //第一天 { if (上午開始) 請假時數 += 午休開始.Subtract(請假開始).TotalHours + 4.5; if (下午開始) 請假時數 += 下班時間.Subtract(請假開始).TotalHours; } else if (i != 0 && i == dates) //最後一天 { if (上午結束) 請假時數 += 請假結束.Subtract(上班時間).TotalHours; else 請假時數 += 3.5; if (下午結束) 請假時數 += 請假結束.Subtract(午休結束).TotalHours; } else { 請假時數 += 8; } } txt總時數.Text = 請假時數.ToString(); txt總天數.Text = (請假時數 / 8).ToString(); //txt總天數.Text = Math.Floor(請假時數 / 8).ToString(); //無條件捨去 }
文章標籤
全站熱搜
留言列表