计算上一季度的开始日期

时间:2018-01-08 19:00:02

标签: vba ms-access access-vba

我希望根据当前日期计算上一季度的开始日期。

哪里

Q1 = Jan-Mar
Q2 = Apr-Jun
Q3 = Jul-Sep
Q4 = Oct-Dec

因此,如果当前日期为8th Jan 2018,则该函数将返回日期1st Oct 2017

我编写了以下代码,然而,这看起来很笨拙而且不优雅,我觉得可能有更好的方式来编写它(例如,使用dateadd)。

Function LMLastQuarterStart() As Date
    Dim mo As Integer
    Dim yr As Integer: yr = Year(Date)
    Select Case Month(Date)
    Case 1 To 3: mo = 10: yr = yr - 1
    Case 4 To 6: mo = 1
    Case 7 To 9: mo = 4
    Case Else: mo = 7
    End Select
    LMLastQuarterStart = DateSerial(yr, mo, 1)
End Function

感谢您提出的任何意见/建议,谢谢。

1 个答案:

答案 0 :(得分:4)

您正在寻找的DateAdd功能如下:

Public Function LastQuarter(theDate As Date) As Date
    LastQuarter = DateAdd("q", DatePart("q", theDate) - 2, DateSerial(Year(theDate), 1, 1))
End Function

说明:

DateSerial(Year(theDate), 1, 1))返回当年的第一季度。

DateAdd("q", DatePart("q", theDate), ThatDate)增加当前季度,返回下一季度(例如第1季度 - >第2季度)。所以-2减去了两个季度。

关于笨重:这个功能可能更短,可能包括更少的操作,但它更难理解。这可能是也可能不相关。

关于参数:我已经让它花了一个日期,既方便测试又让你保持变量。你可以用你所想做的。

感谢Gustav建议使用DatePart代替Format