You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

关键逻辑说明

  1. 日期顺序校验:先判断dateFrom是否晚于dateTo,这种情况直接返回0并启用半天选项。
  2. 总天数计算:用(dateTo - dateFrom).Days + 1确保包含起始和结束日期(例如周四到周五实际是2天,直接取Days会得到1,加1后才是正确总天数)。
  3. 周末天数统计:
    • 完整的每周固定有2天周末,直接用完整周数 × 2计算这部分。
    • 对剩余的不足一周的天数,逐天检查是否为周六或周日,累加周末天数。
  4. 工作日计算:总天数减去周末天数即为最终的工作日数量。
  5. 半天选项控制:保持原逻辑,仅当日期区间为同一天(总天数=1)时启用半天选项,否则禁用。

测试验证

  • 案例1:周四到下周一(共5天),其中周六、周日为周末,工作日=5-2=3天,符合预期。
  • 案例2:周六到周日(共2天),均为周末,工作日=2-2=0天,符合预期。

内容的提问来源于stack exchange,提问作者Una O Lian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:21:28