如何使用VB.Net计算不含周末的工作日天数?
解决VB.NET计算日期区间内不含周末的天数问题
以下是修改后的函数,能够准确计算dateFrom到dateTo区间内排除周六、周日的工作日天数,同时保留原有的半天选项控制逻辑:
Private Function CalculateDaysBetweenDates() As Integer Dim dateFrom As DateTime = Convert.ToDateTime(datepickerFrom.Date) Dim dateTo As DateTime = Convert.ToDateTime(datepickerto.Date) ' 处理起始日期晚于结束日期的情况,直接返回0并启用半天选项 If dateFrom > dateTo Then radHalfday.Enabled = True radHalfday.Value = False Return 0 End If ' 计算包含首尾日期的总天数 Dim totalDays As Integer = (dateTo - dateFrom).Days + 1 ' 计算完整周数和剩余天数 Dim fullWeeks As Integer = totalDays \ 7 Dim remainingDays As Integer = totalDays Mod 7 ' 完整周的周末天数(每周2天) Dim weekendDays As Integer = fullWeeks * 2 ' 遍历剩余天数,统计其中的周末天数 For i As Integer = 0 To remainingDays - 1 Dim currentDayOfWeek As DayOfWeek = dateFrom.AddDays(i).DayOfWeek If currentDayOfWeek = DayOfWeek.Saturday Or currentDayOfWeek = DayOfWeek.Sunday Then weekendDays += 1 End If Next ' 计算工作日天数 Dim workDays As Integer = totalDays - weekendDays ' 控制半天选项:仅当日期区间为同一天时启用 radHalfday.Enabled = (totalDays = 1) radHalfday.Value = False Return workDays End Function
关键逻辑说明
- 日期顺序校验:先判断
dateFrom是否晚于dateTo,这种情况直接返回0并启用半天选项。 - 总天数计算:用
(dateTo - dateFrom).Days + 1确保包含起始和结束日期(例如周四到周五实际是2天,直接取Days会得到1,加1后才是正确总天数)。 - 周末天数统计:
- 完整的每周固定有2天周末,直接用
完整周数 × 2计算这部分。 - 对剩余的不足一周的天数,逐天检查是否为周六或周日,累加周末天数。
- 完整的每周固定有2天周末,直接用
- 工作日计算:总天数减去周末天数即为最终的工作日数量。
- 半天选项控制:保持原逻辑,仅当日期区间为同一天(总天数=1)时启用半天选项,否则禁用。
测试验证
- 案例1:周四到下周一(共5天),其中周六、周日为周末,工作日=5-2=3天,符合预期。
- 案例2:周六到周日(共2天),均为周末,工作日=2-2=0天,符合预期。
内容的提问来源于stack exchange,提问作者Una O Lian
相关产品推荐
相关产品推荐

