以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 如何判断两个时间点之间有多少个双休日 (http://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编辑过]
|