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


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

主题:时间的计算

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

 


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

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


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

这段代码始终没起作用!
        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
7点到8点,20点到20点30分这段时间他们的工作时间应是12小时,没有小数,可程序计算出来有的还会多出半小时。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190621232857.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/6/22 10:39:00 [只看该作者]

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(d1,"yyyy-MM-dd ") & d5
        End If
        If d5 < Format(d3,"HH:mm") And Format(d3,"HH:mm") < d6 Then
            d3 = Format(d1,"yyyy-MM-dd ") & d5
        End If


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


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


密码:732100
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190623160220.png
图片点击可在新窗口打开查看
我换了一组打卡数,出现负数,如图:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.zip

[此贴子已经被作者于2019/6/23 16:28:17编辑过]

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


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

第14行的算法应是第15行的时间1减第14行的时间2,如此类推,直至下一个奇打卡次数,这是夜班的算法,夜班不受7点到8点安8点计,20点到20点30分安20时计限。
[此贴子已经被作者于2019/6/23 16:27:05编辑过]

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

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


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


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190623201146.png
图片点击可在新窗口打开查看
密码732100
我做在窗口的按钮程序有问题:
Dim dr2 As DataRow
For Each dr1 As DataRow In DataTables("打卡数据").DataRows
    dr2 = DataTables("考勤统计").AddNew()
    If dr1("已整理") = True
        e.Cancel = True '如果是,取消操作.
    Else
        Dim p As Date = Nothing
        Dim i As Integer = 1
        For Each dc As DataCol In DataTables("打卡数据").DataCols
            If dc.Name Like "时间*" AndAlso dc.name <> "刷卡日期" Then
                If dr1.IsNull(dc.name) = False Then
                    Dim sp As TimeSpan = CDate(dr1(dc.name)) - p
                    If sp.TotalMinutes > 5 Then
                        dr2("时间" & i) = dr2("刷卡日期") & " " & dr1(dc.Name)
                        i += 1
                        p = dr1(dc.Name)
                    End If
                End If
            Else
                dr2(dc.name) = dr1(dc.name)
                dr1("已整理") = True
            End If
        Next
    End If
Next
e.Form.Controls("Button1").Enabled = False

  虽然取消了复制,但产生了空行,如何让空行不产生。
另外,表属性上的程序还是有问题:
有负数产生。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.zip


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


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

比如

 

For Each dr1 As DataRow In DataTables("打卡数据").DataRows
    'dr2 = DataTables("考勤统计").AddNew()
    If dr1("已整理") = True
        e.Cancel = True '如果是,取消操作.
    Else
        Dim p As Date = Nothing 
        dr2 = DataTables("考勤统计").AddNew()

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