比如2001-5-12 10:20:00 减去1000分钟
但是要求这1000分钟不能包括周六日也不包括早上8:00之前和17:00之后
换句话说就是有效的上班时间
请问有没有好的算法
我本来是用1000/480得到有效天数,然后运算,但是运算的时候要讨论是不是周末
剩下的余数在讨论,是不是有效时间,总之麻烦的很,而且不能确定有没有bug
希望找到更好的算法
但是要求这1000分钟不能包括周六日也不包括早上8:00之前和17:00之后
换句话说就是有效的上班时间
请问有没有好的算法
我本来是用1000/480得到有效天数,然后运算,但是运算的时候要讨论是不是周末
剩下的余数在讨论,是不是有效时间,总之麻烦的很,而且不能确定有没有bug
希望找到更好的算法
解决方案 »
- 关于VB6与SQL数据库连接的问题
- vb如何导入Microsoft Excel 工作表
- 如何得知已经到了DataGrid的最后一行呢?
- 怎样遍历HKEY_LOCAL_MACHINE\SOFTWARE\AUTODESK\AUTOCAD的所有子项的所有ACAD-*的子项,然后找到这个acadlocation的键值?
- 急,VB.NET问题!
- 有谁知道activereport自动生成序列号的属性?
- Activex部件不能注册!
- pq失败导致硬盘分区错误,请各位高手指教!!!
- 我想请教:do until adores is nothing和do until adores.eof 有什么分别?(adores是记录变量。)
- VB制作MCI程序时出现的怪问题
- 将Excel作为网格控件
- 已经打包的VB 程序如何在展开修改
至于判断是否为星期六,则使用weekday函数。
Debug.Print WorkTimeSub(#5/12/2001 10:20:00 AM#, 1000)
Debug.Print WorkTimeSub(#7/22/2010 10:30:00 AM#, 60& * 8)
Debug.Print WorkTimeSub(#7/22/2010 10:30:00 AM#, 60& * 8 * 3)
Debug.Print WorkTimeSub(#7/22/2010 10:30:00 AM#, 60& * 8 * 12)
Debug.Print WorkTimeSub(#7/22/2010 10:30:00 AM#, 60& * 8 * 12 + 60& * 2)
Debug.Print WorkTimeSub(#7/22/2010 10:30:00 AM#, 60& * 8 * 12 + 60& * 7)
End Sub'注:不检查 Date1 是否为有效的工作时间'
Function WorkTimeSub(ByVal Date1 As Date, ByVal Minutes As Long) As Date
Dim dt As Date
Dim lMinutes As Long
Dim lWorkDays As Long
Dim lWeeks As Long
lMinutes = Minutes Mod 480
lWorkDays = Minutes \ 480
If lMinutes > DateDiff("n", #8:00:00 AM#, TimeValue(Date1)) Then
lWorkDays = lWorkDays + 1
dt = DateAdd("n", 480 - lMinutes, Date1)
Else
dt = DateAdd("n", -lMinutes, Date1)
End If
lWeeks = lWorkDays \ 5
lWorkDays = lWorkDays Mod 5
If lWorkDays >= Weekday(dt, vbMonday) Then
lWeeks = lWeeks + 1
dt = DateAdd("d", 5 - lWorkDays, dt)
Else
dt = DateAdd("d", -lWorkDays, dt)
End If
WorkTimeSub = DateAdd("ww", -lWeeks, dt)
End Function