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')