MS Access VBA 正确的年间周数

问题描述

我需要有关此功能的帮助。我有一个表格,根据发布日期我需要指定它落在哪一周。

我们的一周从星期六开始,所以微软几年前发布的这个解决方法 - 行不通。

Public Function WOY(MyDate As Date) As Integer    ' Week Of Year

  WOY = Format(MyDate,"ww",vbSaturday,vbFirstFourDays)
  If WOY > 52 Then
    If Format(MyDate + 7,vbFirstFourDays) = 2 Then WOY = 1
  End If

End Function

Here is an example

非常感谢您的帮助。

谢谢 瓦尔格拉德

解决方法

我不认为这里有一个独特的解决方案,因为 Week 的部分定义是它从星期一开始:https://docs.microsoft.com/en-us/office/troubleshoot/access/functions-return-wrong-week-number 一个易于转换的答案是假设每个星期六的周数与下一个星期一相同。调整工作解决方案来自:https://docs.microsoft.com/en-us/office/troubleshoot/access/functions-return-wrong-week-number#workarounds

Public Function WOY(MyDate As Date) As Integer    ' Week Of Year
MyDate = DateAdd("d",2,MyDate) 'assuming Saturday gets the same weeknumber as the following Monday 
  WOY = Format(MyDate,"ww",vbMonday,vbFirstFourDays)
  If WOY > 52 Then
    If Format(MyDate + 7,vbFirstFourDays) = 2 Then WOY = 1 'borrowing Microsofts solution to handle all edge cases
  End If
End Function

这个解决方案在概念上很简单,但 19 年 12 月 28 日从 2020 年的第 1 周开始。

,

如果我们的一周从星期一开始——我原始消息中的代码 会从 52 翻转到 1 没有任何问题

也许是今年,但不是任何一年。

因此,答案是 - 正如 Mathieu 清楚地解释的那样:您的问题没有解决方案

创建 ISO 8601 标准是有原因的,其中周编号是重要组成部分,因为第一周和最后一周可能跨越日历年界限。

您可以使用任何其他周编号系统,但正如您所见,它很可能存在缺陷。