计算工作日,考虑去掉周末,节假日、补班的情况

本文介绍了一个API方法,通过GetCalculateWorkingDays,处理给定起始日期和工作周数,避开节假日和周末,计算有效的工作日数。核心函数GetEndDate_A详细展示了如何遍历并调整假期和周末,确保最终返回的是指定天数内的实际工作日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        [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;
        }

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值