Foxtable(狐表)用户栏目专家坐堂 → 如何判断两个时间点之间有多少个双休日


  共有2050人关注过本帖树形打印复制链接

主题:如何判断两个时间点之间有多少个双休日

帅哥哟,离线,有人找我吗?
teng0731
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
如何判断两个时间点之间有多少个双休日  发帖心情 Post By: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天。
如何用代码实现上面的判断过程?

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106587 积分:542106 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By: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天。


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106587 积分:542106 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/11/27 15:19:00 [只看该作者]

您是要计算2个时间之间有多少个双休日?还是要排除这些双休日?

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106587 积分:542106 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By: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编辑过]

 回到顶部