首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数返回当月的第一周日期和最后一周日期。

函数返回当月的第一周日期和最后一周日期。
EN

Stack Overflow用户
提问于 2018-10-20 17:58:36
回答 2查看 1.7K关注 0票数 2

我在MS Access表单和报表中创建了一个函数来获取每周的第一个日期,但是它在上个月返回了一周的第一天。

我需要它只返回当前的月份日期。如果当周第一天在上个月,则返回当月的第一天为一周的第一天。

电流输出

当从日期选择器中选择1-10-2018时,它返回27-09-2018,这是上个月的第一个星期,但我需要它返回textbox中选择的月份的第一个日期。

代码语言:javascript
复制
Function GetFirstofWeek(dtDate As Date)
    GetFirstofWeek = DateAdd("d", dtDate, -(Weekday(dtDate)) + 1)
         ' Excel formula for this function which is perfect and may be converted to function as required ‘=MAX(B2-WEEKDAY(B2,14)+1, EOMONTH(B2, -1)+1)
    GetFirstofWeek = DateAdd("d", dtDate, -(Weekday(dtDate, vbThursday) - 1)) 
End Function

每周的最后一天

代码语言:javascript
复制
Function GetLastofWeek(dtDate) as date
    '=MIN(B2+(7-WEEKDAY(B2,14)), EOMONTH(B2, 0))
     ‘this excel formula return date as I need. 
      GetLastofWeek = DateAdd("d", dtDate, (7 - (Weekday(dtDate, vbWednesday)) + 1)) 

End Function

在此功能中,周的最后一天必须是当月,如果第一周的月份结束,那么周的最后一天将被关闭,而周的最后一天将是周的第一天或当前周中剩余的天数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-20 23:13:48

除非我误解了您的要求,请考虑以下两个功能:

第一周

代码语言:javascript
复制
Function FirstOfWeek(datRef As Date) As Date
    If Day(datRef) >= Weekday(datRef, vbThursday) Then
        FirstOfWeek = DateAdd("d", 1 - Weekday(datRef, vbThursday), datRef)
    Else
        FirstOfWeek = DateAdd("d", 1 - Day(datRef), datRef)
    End If
End Function

一些例子

代码语言:javascript
复制
?FirstOfWeek(#2018-10-04#)
04/10/2018 

?FirstOfWeek(#2018-10-10#)
04/10/2018 

?FirstOfWeek(#2018-10-11#)
11/10/2018 

?FirstOfWeek(#2018-10-03#)
01/10/2018 

在这里,函数测试为了获得Thursday->Wednesday周的第一天而要减去的天数是否小于当前月中的天数,如果是,则返回当前月份的第一天。

表达式DateAdd("d", 1 - Day(datRef), datRef)也可以被写入DateSerial(Year(datRef), Month(datRef), 1)以获得相同的结果。

上周最后一周

代码语言:javascript
复制
Function LastOfWeek(datRef As Date) As Date
    LastOfWeek = DateAdd("d", 7 - Weekday(datRef, vbThursday), datRef)
    If Day(datRef) > Day(LastOfWeek) Then
        LastOfWeek = DateSerial(Year(datRef), Month(datRef) + 1, 0)
    End If
End Function

一些例子

代码语言:javascript
复制
?LastOfWeek(#2018-10-04#)
10/10/2018 

?LastOfWeek(#2018-10-03#)
03/10/2018 

?LastOfWeek(#2018-09-27#)
30/09/2018 

与第一个函数类似,该函数首先计算以下Wednesday的日期,然后检查该日期的天数是否小于所提供日期的天数(指示它已误入下一个月)。如果是,则返回当前月份的最后一天。

票数 2
EN

Stack Overflow用户

发布于 2018-10-20 19:15:01

您需要检查输出月份是否与输入月份匹配。为了避免不断地为GetFirstofWeek分配值,我为您的初始计算创建了一个Temp日期。一旦验证完成,就分配输出。

要从Access调用Excel函数,请创建一个Excel.Application实例,由@ComputerVersteher解释(谢谢)

注意:由于创建的对象的存在,不使用excel。代码打算从Access运行。

代码语言:javascript
复制
Option Explicit

Function GetFirstofWeek(dtDate As Date)

Dim Temp As Date

'Temp = DateAdd("d", dtDate, -(Weekday(dtDate)) + 1)
Temp = DateAdd("d", dtDate, -(Weekday(dtDate, vbThursday) - 1))

If Month(Temp) = Month(dtDate) Then
    GetFirstofWeek = Temp
Else
    Dim obj as Object: Set obj = CreateObject("Excel.Application")
    GetFirstofWeek = obj.WorksheetFunction.EoMonth(Temp, 0) + 1
    Set obj = Nothing
End If

End Function

代码语言:javascript
复制
Function GetLastofWeek(dtDate) As Date

Dim Temp As Date

Temp = DateAdd("d", dtDate, (7 - (Weekday(dtDate, vbWednesday)) + 1))

If Month(Temp) = Month(dtDate) Then
    GetLastofWeek = Temp
Else
    Dim obj as Object: Set obj = CreateObject("Excel.Application")
    GetLastofWeek = obj.WorksheetFunction.EoMonth(Temp, 0)
    Set obj = Nothing
End If

End Function
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52908562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档