Foxtable(狐表)用户栏目专家坐堂 → 时间的计算


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

主题:时间的计算

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/13 10:33:00 [显示全部帖子]

编写代码处理,参考

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 10:22:00 [显示全部帖子]

1、判断重复,如果重复,就不拷贝过去,即可。或者加一个列,如果拷贝过去的行,就勾选一下记录。

 

2、判断打开记录,如果第二个时间早于第一个时间,那就算为跨了一天。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 10:59:00 [显示全部帖子]

比如

 

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        Else
            Dim d As Date = #07:00#
            Dim d0 As Date = #08:00#
            Dim d5 As Date = #20:00#
            Dim d6 As Date = #20:30#
            If d < d1 And d1 < d0 Then
                d1 = d0
            End If
            If d5 < d2 And d2 < d6 Then
                d2 = d5
            End If
            If d5 < d3 And d3 < d6 Then
                d3 = d5
            End If
        End If
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = n1
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 11:37:00 [显示全部帖子]

 

请具体说明计算逻辑,就所给的例子,截图说明某一行应该怎么计算。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 14:52:00 [显示全部帖子]

参考

 

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        ElseIf  d1.hour <= 5 Then
            If d3 <> Nothing Then
                d1 = d2
                d2 = d3
            Else
                Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
                If fdr IsNot Nothing Then
                    d1 = e.DataRow("时间2")
                    d2 = fdr("时间1")
                Else
                    d2 = d1
                End If
            End If
        Else
            Dim d As Date = #07:00#
            Dim d0 As Date = #08:00#
            Dim d5 As Date = #20:00#
            Dim d6 As Date = #20:30#
            If d < d1 And d1 < d0 Then
                d1 = d0
            End If
            If d5 < d2 And d2 < d6 Then
                d2 = d5
            End If
            If d5 < d3 And d3 < d6 Then
                d3 = d5
            End If
        End If
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = n1
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 18:33:00 [显示全部帖子]

写入代码以后,重置列重新计算啊

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 22:05:00 [显示全部帖子]

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        ElseIf  d1.hour <= 5 Then
            If d3 <> Nothing Then
                d1 = d2
                d2 = d3
            Else
                Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
                If fdr IsNot Nothing Then
                    d1 = e.DataRow("时间2")
                    d2 = fdr("时间1")
                Else
                    d2 = d1
                End If
            End If
        Else
            Dim d As Date = #07:00#
            Dim d0 As Date = #08:00#
            Dim d5 As Date = #20:00#
            Dim d6 As Date = #20:30#
            If d < d1 And d1 < d0 Then
                d1 = d0
            End If
            If d5 < d2 And d2 < d6 Then
                d2 = d5
            End If
            If d5 < d3 And d3 < d6 Then
                d3 = d5
            End If
        End If
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = iif(n1>24, 0, n1)
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/21 9:41:00 [显示全部帖子]

以下是引用采菊东篱下在2019/6/20 23:09:00的发言:
7点到8点之间的打卡全部安8点计,晚上20时到20.30分之间的时间安20时计,那么你表上计算出来的数很多多了0.5,不对了。

[此贴子已经被作者于2019/6/21 7:11:54编辑过]

 

你判断一下d1、d2的值啊,比如,如果是7-8点的,把d1改成8点。

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/21 9:42:00 [显示全部帖子]

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        ElseIf  d1.hour <= 5 Then
            If d3 <> Nothing Then
                d1 = d2
                d2 = d3
            Else
                Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
                If fdr IsNot Nothing Then
                    d1 = e.DataRow("时间2")
                    d2 = fdr("时间1")
                Else
                    d2 = d1
                End If
            End If
        End If
        Dim d As Date = #07:00#
        Dim d0 As Date = #08:00#
        Dim d5 As Date = #20:00#
        Dim d6 As Date = #20:30#
        If d < d1 And d1 < d0 Then
            d1 = d0
        End If
        If d5 < d2 And d2 < d6 Then
            d2 = d5
        End If
        If d5 < d3 And d3 < d6 Then
            d3 = d5
        End If
       
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = iif(n1>24, 0, n1)
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/23 16:44:00 [显示全部帖子]

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("时间1 > #" & e.DataRow("时间1") & "# and 工号='" & e.DataRow("工号") & "'", "时间1")
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        ElseIf  d1.hour <= 5 Then
            If d3 <> Nothing Then
                d1 = d2
                d2 = d3
            Else
                Dim fdr = e.DataTable.Find("时间1 > #" & e.DataRow("时间1")  & "# and 工号='" & e.DataRow("工号") & "'", "时间1")
                If fdr IsNot Nothing Then
                    d1 = e.DataRow("时间2")
                    d2 = fdr("时间1")
                Else
                    d2 = d1
                End If
            End If
        End If
        Dim d As String = "07:00"
        Dim d0 As String = "08:00"
        Dim d5 As String = "20:00"
        Dim d6 As String = "20:30"
       
        If d < Format(d1,"HH:mm") And Format(d1,"HH:mm") < d0 Then
            d1 = Format(d1,"yyyy-MM-dd ") & d0
        End If
        If d5 < Format(d2,"HH:mm") And Format(d2,"HH:mm") < d6 Then
            d2 = Format(d2,"yyyy-MM-dd ") & d5
        End If
        If d5 < Format(d3,"HH:mm") And Format(d3,"HH:mm") < d6 Then
            d3 = Format(d3,"yyyy-MM-dd ") & d5
        End If
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = iif(n1>28, 0, n1)
End Select
If e.DataRow("工作时间") > 12
    Dim sp1 As Double =e.DataRow("工作时间") -12
    Dim n2 = Math.Floor(sp1)
    If sp1 > n2+0.5 Then
        sp1 = n2+0.5
    Else
        sp1 = n2
    End If
    e.DataRow("加班时间") = sp1
End If

 回到顶部
总数 12 1 2 下一页