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


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

主题:时间的计算

美女呀,离线,留言给我吧!
采菊东篱下
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 11:17:00 [只看该作者]

这代码我刚才自己也顺着你的做法写出了,但未完整,时间2的上下班时间不定的,有的是下了零时,然后上早上7点,下正常班,有的是上了一早班,回家休息几小时后又上晚班,这是换班,所以不能把时间2固定判定计算,我的安打卡次数是否奇偶到有一定道理。
[此贴子已经被作者于2019/6/19 13:28:15编辑过]

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


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

 

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

 

 


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 13:42:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190619132230.png
图片点击可在新窗口打开查看
如图第75行打了一次卡,第二天零时下班,第77行上班又到第二天一时多下班,这种取数方式如此类推到第79行出现打卡次数为奇数止,同理第89行、90行也是这样,从第一个打卡奇次数,到下一个打卡奇次数为止为安这种班次计上、下班工时方式。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 16:44:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工作簿1.zip

你的程序计算出来负数了,我用EXCEL计算了一下,应是我EXCEL中的数据。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190619161941.png
图片点击可在新窗口打开查看

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 16:55:00 [只看该作者]

它应是图上的的数据,第77行4号的工作时间应为当天23时59分时间减当天上班时间加上第二天零时30分下班时间减去零时间,9号的工作时间应为上一天23时59分时间减上一天11时51分时间加上当天的时间3列下班时间减去当天时间2的上班时间。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190619164532.png
图片点击可在新窗口打开查看


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


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

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

 

 


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 19:02:00 [只看该作者]

第76行显示55.25小时不对,5号下班后,5、6日应是休息了,应不显示数据。象这样连续出现3个单次卡,就要老虑下一行的日期是否连续,不连续视为休息,没日期、数据显示。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190619185540.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/20 23:09:00 [只看该作者]

7点到8点之间的打卡全部安8点计,晚上20时到20.30分之间的时间安20时计,那么你表上计算出来的数很多多了0.5,不对了。

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

 回到顶部
总数 29 上一页 1 2 3 下一页