以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于工时计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=102124)

--  作者:10059
--  发布时间:2017/6/13 17:12:00
--  关于工时计算
 姓名   开始休假时间   结束休假时间   休假天数  
 张三  2017-06-12 8:00:00  2017-06-12 12:00:00     0.5
 李四    2017-06-12 8:00:00  2017-06-12 17:30:00     1
 王五    2017-06-12 8:00:00  2017-06-13 17:30:00     2
 赵六    2017-06-12 13:30:00  2017-06-12 17:30:00    0.5

如上表所示。请问老师怎样可以算休假天数??麻烦老师赐教,先谢谢啦!!

--  作者:有点色
--  发布时间:2017/6/13 19:16:00
--  
 Dim d1 As Date = "2017-06-12 8:00:00"
Dim d2 As Date = "2017-06-13 17:30:00"
Dim day As Integer = (d2-d1).Totaldays
msgbox(day)
Dim hour As Integer = (new Date(1,1,1,d2.hour, d2.Minute, d2.Second) - new Date(1,1,1, d1.hour, d1.minute, d1.second)).Totalhours
msgbox(hour)
day = day + iif(hour<=4, 0.5, 1)
msgbox(day)
[此贴子已经被作者于2017/6/14 9:34:55编辑过]

--  作者:10059
--  发布时间:2017/6/14 8:33:00
--  
老师,这样算只有整数天的,没有半天的,将integer改成single型算出来是1.4也不对,请问老师该怎么改??



--  作者:有点色
--  发布时间:2017/6/14 9:36:00
--  
Dim d1 As Date = "2017-06-12 8:00:00"
Dim d2 As Date = "2017-06-13 12:00:00"
Dim day As Integer = (d2-d1).Totaldays
msgbox(day)
Dim hour As Integer = (new Date(1,1,1,d2.hour, d2.Minute, d2.Second) - new Date(1,1,1, d1.hour, d1.minute, d1.second)).Totalhours
msgbox(hour)
Dim days = day + iif(hour<=4, 0.5, 1)
msgbox(days)

--  作者:10059
--  发布时间:2017/6/14 9:55:00
--  
老师,还有个特殊情况就是有上夜班的。

 姓名   开始休假时间   结束休假时间   休假天数  
  张三  2017-06-12 21:00:00   2017-06-13 8:00:00     1




--  作者:有点色
--  发布时间:2017/6/14 10:37:00
--  

分开统计

 

\'Dim d1 As Date = "2017-06-12 8:00:00"
\'Dim d2 As Date = "2017-06-13 12:00:00"
\'Dim d1 As Date = "2017-06-12 13:30:00"
\'Dim d2 As Date = "2017-06-13 18:00:00"
Dim d1 As Date = "2017-06-12 21:00:00"
Dim d2 As Date = "2017-06-14 12:00:00"
If d1.Hour = 8 Then \'上午
    Dim day As Integer = Math.Floor((d2-d1).Totaldays)
    Dim hour As Integer = (new Date(1,1,1,d2.hour, d2.Minute, d2.Second) - new Date(1,1,1, d1.hour, d1.minute, d1.second)).Totalhours
    Dim days = day + iif(hour<=4, 0.5, 1)
    msgbox(days)
ElseIf d1.hour = 13 Then \'下午
    Dim day As Integer = Math.Floor((d2-d1).Totaldays)
    Dim hour As Integer = (new Date(1,1,1,d2.hour, d2.Minute, d2.Second) - new Date(1,1,1, d1.hour, d1.minute, d1.second)).Totalhours
    Dim days = day + iif(hour<=4, 0.5, 1)
    msgbox(days)   
ElseIf d1.hour = 21 Then \'晚上
    Dim day As Integer = Math.Floor((d2-d1).Totaldays)
    Dim hour As Integer = (new Date(1,1,1,d2.hour, d2.Minute, d2.Second) - new Date(1,1,1, d1.hour, d1.minute, d1.second)).Totalhours
    Dim days = day + iif(-hour>=13, 1, iif(-hour>=9, 1.5, 2))
    msgbox(days)      
End If


--  作者:10059
--  发布时间:2017/6/14 10:53:00
--  
谢谢色老师啦!
--  作者:10059
--  发布时间:2017/6/19 9:53:00
--  
色老师,还有个问题请教。

表一:
 姓名   还剩年休假  
 张三   0.5 
 李四    1
 王五    1.5
 赵六    2

表二:
 姓名   开始休假时间   结束休假时间  
 张三   2017-06-13 8:00:00    2017-06-13 12:00:00   
 李四   2017-06-13 8:00:00    2017-06-13 17:30:00   
 王五   2017-06-13 8:00:00    2017-06-14 12:00:00   
 赵六   2017-06-13 8:00:00    2017-06-14 17:30:00  

例如:2017-06-13 至  2017-06-27 这段时间是用来补年休假还没休完的,最大值是15天,
请问老师,怎么根据表一的值,自动生成表二的值呢??

--  作者:有点色
--  发布时间:2017/6/19 10:47:00
--  
Dim d1 As Date = "2017-06-13"
Dim n As Double = 1.5
Dim d2 As Date = d1.AddDays(math.Floor(n-1))
If n - math.Floor(n) = 0.5 Then
    d2 = d2.AddHours(12)
Else
    d2 = d2.AddHours(-6)
End If
msgbox(d2)