如何在vb6中获得基于周数的开始日期

  • 本文关键字:于周数 开始 日期 vb6 vb6
  • 更新时间 :
  • 英文 :


如何将周数转换为该周的开始日期?例如:第41周至2016年10月9日?日期还必须取决于年份。示例:对于2017年,第41周必须等于10月8日。

我已经搜索并发现了这(如何在一周内根据使用vb.net的周数获得开始日期?),但它是为vb.net。我不确定这是否适用于vb6。如果这在vb6中不起作用,我该怎么做呢?

谢谢:)

试试这个:

Private Sub Form_Load()
    Dim d As Date
    d = GetWeekStartDate(41, 2016)
    MsgBox d
    d = GetWeekStartDate(41, 2017)
    MsgBox d
End Sub
Private Function GetWeekStartDate(weekNumber As Integer, year As Integer) As Date
    Dim startDate As Date
    Dim day As Integer
    startDate = DateSerial(year, 1, 1)
    day = Weekday(startDate, vbSunday)
    startDate = DateAdd("d", DaysToAdd(day), startDate)
    GetWeekStartDate = DateAdd("ww", weekNumber - 1, startDate)
End Function
Private Function DaysToAdd(day As Integer) As Integer
    DaysToAdd = 0
    If day > 1 Then DaysToAdd = 7 - day + 1
End Function

如果您不需要所有选项,您可以简化它,但它看起来是正确的:

Option Explicit
Private Function WeekDate( _
    ByVal Year As Long, _
    ByVal Week As Long, _
    Optional ByVal FirstWholeWeekIs1 As Boolean, _
    Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbUseSystemDayOfWeek) As Date
    Dim YearDate As Date
    Dim WeekdayOffset As Long
    Dim WeekOffset As Long
    YearDate = DateSerial(Year, 1, 1)
    WeekdayOffset = Weekday(YearDate, FirstDayOfWeek) - 1
    If WeekdayOffset <> 0 Then
        YearDate = DateAdd("d", -WeekdayOffset, YearDate)
        WeekOffset = IIf(FirstWholeWeekIs1, 0, 1)
    Else
        WeekOffset = 1
    End If
    WeekDate = DateAdd("ww", Week - WeekOffset, YearDate)
End Function
Private Sub Form_Load()
    Dim Year As Long
    Dim Week As Long
    AutoRedraw = True
    Year = 2015
    Week = 1
    Print Year, Week, WeekDate(Year, Week)
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
    Week = 2
    Print Year, Week, WeekDate(Year, Week)
    Print Year, Week, WeekDate(Year, Week, FirstDayOfWeek:=vbMonday)
    Year = 2016
    Week = 41
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
    Year = 2017
    Week = 1
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=False)
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
End Sub

最新更新