Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何在 Access 的查询计算两个日期之间的工作日?

赖观配  发表于:2007-11-26 23:35:48  
复制

例如:一个表里有[收货日期],[录单日期],是否可以在查询里计算出它们之间相差的工作天数?

 

网上有一篇文章:

在 Access 中,可以使用表达式计算两个日期之间某个特定星期几的数目。例如,在窗体上输入起始日期和终止日期,然后显示两个日期之间包含的星期三的数目。以下步骤就是具体方法:创建窗体、插入文本框和组合框,然后输入表达式。

在“数据库”窗口中,单击“对象”下的“窗体”,然后单击“新建”。 
在“新建窗体”对话框中,单击“设计视图”,然后单击“确定”。 
使用工具箱中的“文本框”工具,将三个未绑定文本框添加到窗体中。 
将第一个文本框的“名称”属性设置为“起始日期”,第二个设置为“终止日期”,第三个为“天数”。 
将“起始日期”和“终止日期”文本框的“格式”属性设置为“短日期”。 
将“天数”文本框的“控件来源”属性设置为下列表达式: 
=DateDiff("ww",[起始日期],[终止日期],[星期])-Int([星期]=Weekday([起始日期]))通过按下工具框中的“控件向导”按钮,使用“组合框”工具将组合框添加到窗体上。 
在“组合框向导”的首页,单击“自行键入所需的值”,然后单击“下一步”。 
在向导的第二页,在“列数”文本框内键入“2”。 
在这两列中,输入下列值:
 第 1 列 第 2 列 
 星期日    1 
 星期一    2 
 星期二    3 
 星期三    4 
 星期四    5 
 星期五    6 
 星期六    7 

在向导的第三页,在“可用字段”框中单击“第 2 列”,然后单击“完成”。 
将该组合框的“名称”属性设置为“星期”。 
切换至“窗体”视图。 
在“起始日期”文本框中,键入起始日期(年/月/日)。 
在“终止日期”文本框中,键入终止日期(年/月/日)。 
在“星期”组合框中,单击下拉列表中一周的某一天。
“天数”文本框将显示组合框中选定的那一天出现的次数。

 

Top
何勇 发表于:2007-11-26 23:39:15
计算两个日期间的工作日
本示例的功能是如何计算给定的两个日期之间的工作日,你可以选择是否将星期六或星期日也包括进去。同时本程序还允许你可入一些假期,从而在计算时将这些假期排除在外。

函数:

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


何勇 发表于:2007-11-27 00:26:32

Public Function FunCountTs(firstDate As Date, LastDate As Date) As Integer
''计算天数
    On Error GoTo Err:


    Dim i As Integer
    Dim TempDate As Date    '临时日期
    Dim Tempts As Long
   
    Tempts = DateDiff("d", firstDate, LastDate)
    
    For i = 0 To Tempts
    
        TempDate = DateAdd("d", i, firstDate)
       
        Select Case Format(TempDate , "w")
       
        Case 2, 3, 4, 5, 6
            FunCountTs= FunCountTs+ 1
        End Select

    Next

Err:
    Exit Function


End Function



赖观配 发表于:2007-11-27 00:36:31

非常感谢cuxun

 

排除星期6、7的问题已解决。

 

可否也把节假日也除外的代码补上。谢谢!



麥田 发表于:2007-11-27 08:21:43

可参考这个示例里面的计算工作日代码:

《20个MVP源码示例》

http://www.accessoft.com/article-show.asp?id=922



总记录:4篇  页次:1/1 9 1 :