以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  时间计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176581)

--  作者:lianghanyu
--  发布时间:2022/4/19 8:36:00
--  时间计算
怎么根据开始时间, 计划耗时, 然后减去中间午休和晚休时间(周一至周六 早上8.00-12.00,下午13.30-19.30为上班时间,周日休息 ),得出 计划完成时间? 和实际完成时间后,实际用时?因为我要对比这个任务是否在计划时间内完成。
--  作者:有点蓝
--  发布时间:2022/4/19 9:40:00
--  
Dim d1 As Date = #04/09/2022 10:00# \'开始时间
Dim hs As Double = 39 \'计划耗时
Dim d11 As Date = New Date(d1.year, d1.month, d1.day, 8, 0, 0)
Dim d12 As Date = New Date(d1.year, d1.month, d1.day, 12, 0, 0)
Dim d21 As Date = New Date(d1.year, d1.month, d1.day, 13, 30, 0)
Dim d22 As Date = New Date(d1.year, d1.month, d1.day, 19, 30, 0)
Dim hh As Double
Dim d As Date = d1
If d <= d11 Then
    hh = 10
ElseIf d > d11 And d < d12 Then
    hh = (d12 - d).TotalHours + 6
ElseIf d > d12 And d < d21 Then
    hh = 6
ElseIf d > d21 And d < d22 Then
    hh = (d22 - d).TotalHours
End If
Output.Show("hh=" & hh)
d = d11
Do While hh < hs
    Dim c As Double = hs - hh
    Output.Show("c=" & c)
    If c > 10 Then
        hh += 10
        d = d.adddays(1)
        If d.DayOfWeek = 0 Then d = d.adddays(1)
        Output.Show("hh3=" & hh)
        Output.Show("d=" & d)
    Else
        hh += c
        Output.Show("c < 10")
        d = d.AddHours(c)
        Output.Show("hh4=" & hh)
        Output.Show("d2=" & d)
        Exit Do
    End If
Loop
d = d.adddays(1)
MsgBox("计划完成时间=" & d)


--  作者:ntcsm
--  发布时间:2023/3/27 14:32:00
--  
共两列(时间,用时),同一字段(时间),下一行减去上一行求时间差