Foxtable(狐表)用户栏目专家坐堂 → [求助]日期大小判定代码


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

主题:[求助]日期大小判定代码

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/8 10:57:00 [显示全部帖子]

datacolchanging事件

Select Case e.DataCol.Name
    Case "开始时间","结束时间"
        If e.DataRow.IsNull("开始时间") OrElse e.DataRow.IsNull("结束时间")
        Else
            If e.DataRow("开始时间") >= e.DataRow("结束时间") Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
        End If
        If e.DataCol.Name = "开始时间" Then
            Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify"),"[_Identify] desc")
            If dr IsNot Nothing Then
                If e.DataRow("开始时间") <= dr("结束时间") Then
                    msgbox("开始时间必须大于上一行结束时间")
                    e.Cancel = True
                End If
            End If
        End If
End Select

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/8 13:54:00 [显示全部帖子]

Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify") & " and 工号='" & e.DataRow("工号") & "'","[_Identify] desc")

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/8 14:38:00 [显示全部帖子]

我测试没有问题,上传实例说明

代码放到datacolchanging事件,不是datacolchanged事件

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/10 11:30:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "开始时间"
        If e.DataRow.IsNull("开始时间") = False
            If e.NewValue >= e.DataRow("结束时间") Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
            Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify") & " and 工号='" & e.DataRow("工号") & "'","[_Identify] desc")
            If dr IsNot Nothing Then
                If e.NewValue <= dr("结束时间") Then
                    msgbox("开始时间必须大于上一行结束时间")
                    e.Cancel = True
                End If
            End If
        End If
    Case "结束时间"
        If e.DataRow.IsNull("结束时间") = False
            If e.DataRow("开始时间") >= e.NewValue Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
        End If

End Select

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/10 17:43:00 [显示全部帖子]

下面使用文字大概描述一下方法

dim sum as integer = 0
if 开始时间 <= 上午10:00 andalso 结束时间 >= 上午10:10
sum = sum + 10
end if
if 开始时间 <= 下午:15:00 andalso 结束时间 >= 下午:15:10
sum = sum + 10
end if
if 开始时间 <= 中午:12:00 andalso 结束时间 >= 中午:13:10
sum = sum + 60
end if

总时间 = 结束时间 - 开始时间 - sum

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 9:51:00 [显示全部帖子]

贴出具体代码说明

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 10:00:00 [显示全部帖子]

Dim d1 As Date = #10/11/2019 09:00#
Dim d2 As Date = #10/11/2019 16:00#

Dim sum As Integer = 0
If Format(d1,"HHmm") <= "1000" AndAlso Format(d2,"HHmm") >= "1010"
    sum = sum + 10
End If
If Format(d1,"HHmm") <= "1500" AndAlso Format(d2,"HHmm") >= "1510"
    sum = sum + 10
End If
If Format(d1,"HHmm") <= "1200" AndAlso Format(d2,"HHmm") >= "1300"
    sum = sum + 60
End If
msgbox(sum )
Dim sp As TimeSpan = d2 - d1
msgbox(sp.TotalMinutes)
Dim 总时间 = sp.TotalMinutes - sum
msgbox(总时间)

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 17:39:00 [显示全部帖子]

由于休息时间只有一个,并且在当天之内,所以不用考虑跨天了。

但是如果分为多个班次的,按照班次区分独立计算,比如计算白班的按16 楼的,计算夜班的另外计算,方法参考16楼即可

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/17 9:23:00 [显示全部帖子]

我测试没有问题。原来的代码本来就不是按行顺序取值的,而是按照主键[_Identify]取上一行的,所以怎么排序都不可能有影响

Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify") & " and 工号='" & e.DataRow("工号") & "'","[_Identify] desc")

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/17 9:40:00 [显示全部帖子]

因为之前的代码只是判断了开始时间不能大于上一行的结束时间。没有做结束时间不能小于下一行的开始时间的判断。逻辑是一样的自己参考着做。

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