获取给定日期的周数

Nic*_*kis 10 ms-access vba

例子:

'DD/MM/YYYY
"1/1/2009" should give `1`
"31/1/2009" should give `5`
"1/2/2009" should also give `5`
Run Code Online (Sandbox Code Playgroud)

Format("1/2/2009", "ww")回报6.

那么,我怎样才能得到正确的结果呢?

小智 27

我在这里做了两件与你的期望不符的事情,我想:假设你想要1月1日那周作为第1周,并使用星期日作为一周的第一天所以从2​​008年12月28日星期日到第1周2009年1月3日星期六.

第6周将通过这种方法在2月1日星期日开始.

第1周的ISO标准是包含1月4天或一年中第一个星期四的ISO标准(表达同一事物的不同方式).您可以指定此计算方法和一周的第一天:

Format(SomeDate,"ww",vbMonday,vbFirstFourDays)
Run Code Online (Sandbox Code Playgroud)

看这里的语法:

https://support.office.com/en-US/article/Format-Function-6F29D87B-8761-408D-81D3-63B9CD842530


UpT*_*eek 5

这可能有效:格式化(YourDate,"ww",vbMonday)


Dav*_*ton 5

无论一周中哪一天开始,您都需要传递明确的日期值."2009年1月31日"只能是一个日期(1月31日),但"1/2/2009"可能是1月2日(美国式)或2月1日(所有其他人更感觉我们美国人).

在这种情况下,我使用DateSerial()来确保日期没有被误解:

  Format(DateSerial(2009,2,1), "ww", vbMonday)
Run Code Online (Sandbox Code Playgroud)

虽然这不会导致您的问题,因为Access有助于利用系统的本地化日期设置,我认为这是您应该做的事情.你当然不得不在Access中的SQL中这样做,所以我不认为这是代码和表达式的坏习惯.