[HttpGet]
[AjaxOnly]
public async Task<IActionResult> GetCalculateWorkingDays(string startDate, int weekdays)
{
DateTime startDateTemp = DateTime.Parse(startDate);
DateTime Date_start = DateTime.Parse(startDateTemp.Year + "-01- 01");
DateTime Date_end = GetCurrentMonthLastDay(DateTime.Parse(startDateTemp.Year + "-12- 01"));
string queryJson = "{\"Date_start\":\"" + Date_start.ToString("yyyy-MM-dd") + "\",\"Date_end\":\"" + Date_end.ToString("yyyy-MM-dd") + "\"}";
//获取一年的节假日
IEnumerable<T_HolidaysTypeEntity> listHolidayType = await _iHolidaysTypeBLL.GetList(queryJson);
List<T_HolidaysTypeEntity> listHolidayTypeA = new List<T_HolidaysTypeEntity>();
listHolidayTypeA.AddRange(listHolidayType);
string endDate = GetEndDate_A(startDate, weekdays, listHolidayTypeA);
// object endDate = await GetEndDate(startDate, weekdays);
return Success("保存成功!", endDate.ToString());
}
//计算工作日,遇到周末跳过去,不减1,直到等于0跳出循环。
public string GetEndDate_A(string startDate, int days, List<T_HolidaysTypeEntity> listHolidayType)
{
DateTime startDateTemp = DateTime.Parse(startDate);
int daysTemp = days;
do
{
startDateTemp = startDateTemp.AddDays(1);
T_HolidaysTypeEntity resultModel = listHolidayType.Find(x => x.Date == startDateTemp);
if (resultModel != null)
{
if (resultModel.Type == 1 || resultModel.Type == 2)//节假日或周末
{
}
else if (resultModel.Type == 3)//补班需要减1
{
daysTemp = daysTemp - 1;
}
}
else
{
daysTemp = daysTemp - 1;
}
} while (daysTemp>0);
return startDateTemp.ToString("yyyy-MM-dd");
}
/// <summary>
/// 获取指定月份的最后一天
/// </summary>
/// <param name="dateTime">传入时间</param>
/// <returns></returns>
private DateTime GetCurrentMonthLastDay(DateTime dateTime)
{
DateTime d1 = new DateTime(dateTime.Year, dateTime.Month, 1);
DateTime d2 = d1.AddMonths(1).AddDays(-1);
return d2;
}
本文介绍了一个API方法,通过GetCalculateWorkingDays,处理给定起始日期和工作周数,避开节假日和周末,计算有效的工作日数。核心函数GetEndDate_A详细展示了如何遍历并调整假期和周末,确保最终返回的是指定天数内的实际工作日期。
3055

被折叠的 条评论
为什么被折叠?



