獲取兩個日期之間的工作日天數以及獲取兩個日期之間的所有日期的列表
阿新 • • 發佈:2018-12-06
1.首先是程式碼實現:
1.1獲取工作日天數
/// <summary> /// 獲取兩個日期之間的工作日天數 /// </summary> /// <param name="BeginDate">開始日期</param> /// <param name="EndDate">結束日期</param> /// <returns></returns> public int GetWorkDays(string BeginDate, string EndDate) { DateTime Start = Convert.ToDateTime(BeginDate); DateTime End = Convert.ToDateTime(EndDate); ;//獲取今天日期 TimeSpan Tspan = End.Subtract(Start);//TimeSpan得到dt1和dt2的時間間隔 int DayCount = Tspan.Days;//獲取兩個日期間的總天數 int WorkDayCount = 0;//工作日 //迴圈用來扣除總天數中的雙休日 for (int i = 0; i <= DayCount; i++) { DateTime tempdt = Start.Date.AddDays(i); if (tempdt.DayOfWeek != System.DayOfWeek.Saturday && tempdt.DayOfWeek != System.DayOfWeek.Sunday) { WorkDayCount++; } } return WorkDayCount; }
1.2 獲取兩個日期之間的日期列表:
此處根據傳入月份和年份實現,同樣也可以傳入兩個日期進行實現,同時附加兩個獲取年份和月份列表的函式。
/// <summary> /// 根據月份獲取當前月份的天數 /// </summary> /// <param name="Years">年份</param> /// <param name="Month">月份</param> /// <returns></returns> public List<string> GetDayList(string Years, int Month) { List<string> List = new List<string>(); int Day = DateTime.DaysInMonth(int.Parse(Years), Month); ; for (int i = 0; i <= Day; i++) { List.Add(string.Format(@"{0}-{1}-{2}", Years, Month.ToString("D2"), i.ToString("D2"))); } return List; } public SelectList GetYearsList() { var options = new List<SelectListItem>(); int Year = DateTime.Now.Year; for (int i = Year; i < 2016; i--) { options.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() }); } return new SelectList(options, "Value", "Text", ""); } public SelectList GetMonthList() { var options = new List<SelectListItem>(); int Year = DateTime.Now.Year; for (int i = 1; i <= 12; i++) { options.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() }); } return new SelectList(options, "Value", "Text", ""); } }
2 SQL 實現:
2.1獲取工作日列表。
select * from ( SELECT CONVERT(NVARCHAR(10), DateAdd(day,number,'2017-09-29'),120) AS Date, Datename(weekday, CONVERT(NVARCHAR(10), DateAdd(day,number,'2017-09-29'),120)) as Type FROM master..spt_values WHERE type = 'p' AND number <= DateDiff(day,'2014-09-29','2019-10-29')) as b where Type<>'星期六' and Type<>'星期日'
2.2 獲取日期列表:
SELECT CONVERT(NVARCHAR(10), DateAdd(day,number,'2017-09-29'),120) AS Date,
Datename(weekday, CONVERT(NVARCHAR(10), DateAdd(day,number,'2017-09-29'),120)) as Type
FROM master..spt_values
WHERE type = 'p' AND number <= DateDiff(day,'2014-09-29','2019-10-29')