庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>VB专区>编程技巧>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

计算两个日期间的工作日

 作者:本站收集   日期:2005-8-4 11:32:48
字号选择〖 〗/ 双击滚屏 单击停止   
本示例的功能是如何计算给定的两个日期之间的工作日,你可以选择是否将星期六或星期日也包括进去。同时本程序还允许你可入一些假期,从而在计算时将这些假期排除在外。

函数

Public Function BusinessDateDiff(ByVal dDate1 As Date, ByVal dDate2 As Date) As Long

函数的功能是计算两个日期(dDate1和dDate2)之间的工作日。下面的这些属性允许你对计算实施控制,告诉程序如何进行计算。

属性

Public IncludeSaturdays As Boolean

当值为真,计算时将包括星期六,否则将星期六排除在外。

Public IncludeSundays As Boolean

当值为真,计算时将包括星期日,否则将星期日排除在外。

Public Property Let IncludeFirstDate(bInc As Boolean) Public Property
Get IncludeFirstDate() As Boolean

在默认情况下,BusinessDateDiff函数会将你输入的起始日包括在计算中,但不包括你输入的终止日。将该属性值设为假,计算时就不包括你输入的起始日。

Public Property Let IncludeLastDate(bInc As Boolean)

Public Property Get IncludeLastDate() As Boolean

在默认情况下,BusinessDateDiff函数不包括你输入的最后一天。将该属性值设为真,程序把你输入的最后一天包括在计算中。

方法

Public Sub HolidayAdd(dHoliday As Date)

添加一个假期列表,以便在计算时排除这些假期。在默认情况下,没有添加任何假期。

Public Sub HolidayRemove(dHoliday As Date)

从假期列表移除假期

Public Sub HolidayClear()

清除全部假期列表

代码清单

首先建立一个新的类模块,名为cBusinessDates,将下面的代码粘贴进去。

Option Explicit

Public IncludeSaturdays As Boolean
Public IncludeSundays As Boolean

Private mbIncludeFirstDate As Boolean
Private mbIncludeLastDate As Boolean

Private Holidays As New Collection

Public Sub HolidayAdd(dHoliday As Date)

On Error Resume Next

Holidays.Add dHoliday, "D" & dHoliday

If Err Then
Err.Clear
End If

End Sub

Public Sub HolidayRemove(dHoliday As Date)

On Error Resume Next

Holidays.Remove "D" & dHoliday

If Err Then
Err.Clear
End If

End Sub

Public Sub HolidayClear()

Dim x As Long

For x = 1 To Holidays.Count
Holidays.Remove 1
Next

End Sub

Public Property Let IncludeFirstDate(bInc As Boolean)

mbIncludeFirstDate = bInc

End Property

Public Property Let IncludeLastDate(bInc As Boolean)

mbIncludeLastDate = bInc

End Property

Public Property Get IncludeFirstDate() As Boolean

IncludeFirstDate = mbIncludeFirstDate

End Property

Public Property Get IncludeLastDate() As Boolean

IncludeLastDate = mbIncludeLastDate

End Property

'该函数不把dDate2包含在计算中,如果dDate2是星期日,而你又选择了计算星期日,该日期仍不计算在内。

Public Function BusinessDateDiff(ByVal dDate1 As Date, ByVal dDate2 As Date) As Long

Dim dCurDate As Date
Dim dLastDate As Date
Dim dFirstDate As Date
Dim lDayCount As Long
Dim eDay As VbDayOfWeek
Dim dHoliday As Variant

'调整应将哪一个日期包括在计算中(第一个还是第二个)

If IncludeFirstDate Then
dFirstDate = dDate1
Else
dFirstDate = dDate1 + 1
End If

If IncludeLastDate Then
dLastDate = dDate2 + 1
Else
dLastDate = dDate2
End If

'在所有日期中循环,并更新日期计数

dCurDate = dFirstDate

Do While dCurDate <> dLastDate

eDay = WeekDay(dCurDate)

If IncludeSaturdays And eDay = vbSaturday Then
lDayCount = lDayCount + 1
End If

If IncludeSundays And eDay = vbSunday Then
lDayCount = lDayCount + 1
End If

If eDay >= vbMonday And eDay <= vbFriday Then
lDayCount = lDayCount + 1
End If

dCurDate = dCurDate + 1

Loop

'根据假期调整日期计数

For Each dHoliday In Holidays

'如果假期在你所输入的日期范围之内

If CDate(dHoliday) >= dFirstDate And CDate(dHoliday) <= dLastDate Then

eDay = WeekDay(CDate(dHoliday))

If IncludeSaturdays And eDay = vbSaturday Then
lDayCount = lDayCount - 1
End If

If IncludeSundays And eDay = vbSunday Then
lDayCount = lDayCount - 1
End If

If eDay >= vbMonday And eDay <= vbFriday Then
lDayCount = lDayCount - 1
End If

End If

Next

BusinessDateDiff = lDayCount

End Function

Private Sub Class_Initialize()

IncludeFirstDate = True
IncludeLastDate = False
IncludeSundays = False
IncludeSaturdays = False

End Sub

上一篇:自动记录应用软件工作时间    下一篇:用VB实现在程序运行时使系统日期和时间不被修改  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-4 11:32:48
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿