以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何判断两个时间点之间有多少个双休日  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=143516)

--  作者:teng0731
--  发布时间:2019/11/27 14:30:00
--  如何判断两个时间点之间有多少个双休日
  如何判断两个时间点之间间隔多少天,可以用下面的语句:
Dim d1 as Date = #3/17/2019 12:30:29#
Dim d2 as Date = #5/23/2019 18:33:52#
Dim t As TimeSpan = d2 - d1
Dim s As Double = t.TotalDays

还需要继续进行判断,这两个时间之间间隔了多少个双休日的天数,如假设间隔一个双休日,那就是2天,间隔一个双休日加一个星期六,那就是3天;
如果首尾的时间,也落在双休日,则只计算其真正的时间所折算成的天数,比如上面的起始时间d1如果刚好为星期六,其也落在了双休日中,但d1不能计算为1天,只能计算从12:30:29到24:00:00之间的时间折算为天数:0.478831018518519天;如果上面的结束时间d2刚好落在星期六,则计算天数时,只能计算18:33:52折算为天数:0.773518518518518天。
如何用代码实现上面的判断过程?

--  作者:有点蓝
--  发布时间:2019/11/27 14:33:00
--  
Dim d1 As Date = #3/17/2019 12:30:29#
Dim d2 As Date = #5/23/2019 18:33:52#

Dim d As Integer = 0
Do While d1 <= d2
    If d1.DayOfWeek = 0 OrElse d1.DayOfWeek = 6
    Else
        d += 1
    End If
    d1 = d1.AddDays(1)
Loop
msgbox(d)

--  作者:teng0731
--  发布时间:2019/11/27 15:05:00
--  
 感谢有点蓝老师,上面的代码只解决一部分问题,将双休日剔除了去计算间隔天数,
上面的代码存在两个问题:
(1)计算结果不精准,用原来的代码
Dim d1 as Date = #3/17/2019 12:30:29#
Dim d2 as Date = #5/23/2019 18:33:52#
Dim t As TimeSpan = d2 - d1
Dim s As Double = t.TotalDays
这个进行计算时,可以计算出带小数点的天数,而使用老师的代码则忽略了这个因素。

(2)对于首尾时间落在双休日的情况,没有考虑:
如果首尾的时间,也落在双休日,则只计算其真正的时间所折算成的天数,比如上面的起始时间d1如果刚好为星期六,其也落在了双休日中,但d1不能计算为1天,只能计算从12:30:29到24:00:00之间的时间折算为天数:0.478831018518519天;如果上面的结束时间d2刚好落在星期六,则计算天数时,只能计算18:33:52折算为天数:0.773518518518518天。


--  作者:有点蓝
--  发布时间:2019/11/27 15:19:00
--  
您是要计算2个时间之间有多少个双休日?还是要排除这些双休日?
--  作者:有点蓝
--  发布时间:2019/11/27 15:48:00
--  
计算2个时间之间有多少个双休日

Dim d1 As Date = #3/17/2019 12:30:29#
Dim d2 As Date = #5/23/2019 18:33:52#

Dim d3 As Date = d1.Date.AddDays(1)
Dim d4 As Date = d2.Date

Dim d As Double = 0
Do While d3 <= d4
    If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6
        d += 1
    End If
    d3 = d3.AddDays(1)
Loop
Dim t As TimeSpan = d1.Date.AddDays(1) - d1
Output.Show(t.TotalDays)
d += t.TotalDays

t = d2 - d4
Output.Show(t.TotalDays)
d += t.TotalDays
msgbox(d)
[此贴子已经被作者于2019/11/27 15:50:04编辑过]

--  作者:teng0731
--  发布时间:2019/11/27 16:10:00
--  
 感谢老师,根据老师的代码和自己理解的需求,最终自己需要的代码为:

Dim d1 As Date = #11/22/2019 12:30:29# \'起始日期时间
Dim d2 As Date = #11/30/2019 18:33:52# \'终止日期时间
Dim d3 As Date =d1.Date \'只取日期部分
Dim d4 As Date =d2.Date \'只取日期部分
Dim t As TimeSpan = d2 - d1
Dim day1 As Double = t.TotalDays
\'计算总共有多少个双休日
Dim d As Integer = 0
Do While d3 <= d4
    If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6 Then
        d += 1
    End If
    d3 = d3.AddDays(1)
Loop
day1 = day1 - d
\'判断起始日期是否落在双休日
If d1.DayOfWeek = 0 OrElse d1.DayOfWeek = 6 Then
    Dim h1 As Integer =23 - d1.Hour
    Dim m1 As Integer =59 - d1.Minute
    Dim s1 As Integer =59 - d1.Second
    Dim tp1 As New TimeSpan(h1,m1,s1)
    Dim tp2 As New TimeSpan(0,0,0,1)
    tp1 = tp1.Add(tp2)
    day1=day1-tp1.TotalDays+1
End If
\'判断终止日期是否落在双休日
If d2.DayOfWeek = 0 OrElse d2.DayOfWeek = 6 Then
    Dim h2 As Integer = d2.Hour
    Dim m2 As Integer = d2.Minute
    Dim s2 As Integer = d2.Second
    Dim tp3 As New TimeSpan(h2,m2,s2)
    day1=day1-tp3.TotalDays+1
End If
\'剔除双休日后的,两个时间之间间隔的天数

msgbox(day1)
[此贴子已经被作者于2019/11/27 16:26:46编辑过]