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


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

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

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


加好友 发短信
等级:幼狐 帖子:51 积分:592 威望:0 精华:0 注册:2018/7/5 21:52:00
  发帖心情 Post By:2019/10/10 16:48:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:时间大小判定.zip

不好意思,还是附件这个项目有个问题请教:怎么样按照一定的规则在字段“工数”中扣除休息时间呢?
休息时间的规定:上午10:00--10:10 (10分钟休息);下午:15:00--15:10 (10分钟休息);中午:12:00--13:00 (60分钟休息)。
附件是实例说明,麻烦帮我看下,谢谢。
[此贴子已经被作者于2019/10/10 16:47:52编辑过]

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望: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

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


加好友 发短信
等级:幼狐 帖子:51 积分:592 威望:0 精华:0 注册:2018/7/5 21:52:00
  发帖心情 Post By:2019/10/11 9:39:00 [只看该作者]

有点问题啊,如果开始时间是上午9点,结束时间是下午16点,sum应该=80分钟。这个方法计算就不对了。

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


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

贴出具体代码说明

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


加好友 发短信
等级:幼狐 帖子:51 积分:592 威望:0 精华:0 注册:2018/7/5 21:52:00
  发帖心情 Post By:2019/10/11 9:53:00 [只看该作者]

不好意思啊图片点击可在新窗口打开查看,就是不知道怎么写代码

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望: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(总时间)

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


加好友 发短信
等级:幼狐 帖子:51 积分:592 威望:0 精华:0 注册:2018/7/5 21:52:00
  发帖心情 Post By:2019/10/11 17:31:00 [只看该作者]

谢谢,现在追加一个休息时间;上班开始时间:16:50,结束时间:01:05;休息时间:22:20--22:30 (10分钟),由于日期跨天了。下面的代码就无法自动计算了,还请麻烦指导。

Dim d1 As Date = #10/11/2019 16:50#
Dim d2 As Date = #10/12/2019 01:05#

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
If Format(d1,"HHmm") <= "2220" AndAlso Format(d2,"HHmm") >= "2230"
    sum = sum + 10
End If
msgbox(sum )
Dim sp As TimeSpan = d2 - d1
msgbox(sp.TotalMinutes)
Dim 总时间 = sp.TotalMinutes - sum
msgbox(总时间)

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


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

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

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

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


加好友 发短信
等级:幼狐 帖子:51 积分:592 威望:0 精华:0 注册:2018/7/5 21:52:00
  发帖心情 Post By:2019/10/17 9:14:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:时间大小判定.foxdb

不好意思,前面提到的:同年月日的下一行的“开始时间”必须大于上一行的“结束时间”  的条件,当日期按照升序排序的时候是成立的,但是按照降序的话就不对。能不能设定成不管日期怎么排序,都成立呢?比如:人员A,三个时间段:2019-10-17 8:00--9:00(第1个时间)  2019-10-17 10:00--12:00(第2个时间)  2019-10-17 13:00--16:00(第3个时间)  不管这三个时间怎么排序,当修改第2个时间的时候、“开始时间”必须大于第1个时间的“结束时间”。

图片点击可在新窗口打开查看此主题相关图片如下:123.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2019/10/17 9:15:15编辑过]

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望: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")

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