2009-10-30 126 views
9

例子:指定日期的獲取星期數

'DD/MM/YYYY 
"1/1/2009" should give `1` 
"31/1/2009" should give `5` 
"1/2/2009" should also give `5` 

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

那麼,我怎樣才能得到正確的結果呢?

+3

它只是計數星期日作爲一週的第一天,而不是星期一。 – falstro 2009-10-30 13:06:59

回答

25

在這裏做兩件事情不符合您的期望,我認爲: 假設您想讓1月1日的周作爲第1周,並使用星期日作爲本週第一天 所以它從2008年12月28日星期日到星期六3R d 2009年1月。

第6周將從2月1日星期日開始用這種方法。

第1周的ISO標準是包含1月4日或1年的第一個星期四(表達同一事物的不同方式)的標準。 您可以指定這種計算方法和一週的第一天:

Format(SomeDate,"ww",vbMonday,vbFirstFourDays) 

在這裏看到的語法:

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

+0

+1,這是完整的答案。我希望你不介意整容編輯。 – 2009-10-30 13:31:54

+0

一點也不,我現在輪到更新我的個人資料信息,所以我有一個正確的名字(我剛剛從superuser.com彈出並註冊回答這個問題) – AdamV 2009-10-30 13:38:38

+0

http://www.rondebruin.nl /isodate.htm是ISO – 2009-10-30 14:02:30

5

這可能會實現:格式(YourDate, 「WW」,vbMonday)

+0

哦,我明白了。謝謝Sosh。它*現在工作*:P – 2009-10-30 13:25:46

+0

@Sosh:我很好奇看到OP預計01/05/09(1月5日09)的情況?我認爲OP可能期望1月5日是第1周,而按照你的例子,OP將是第2周。 – shahkalpesh 2009-10-30 13:30:21

+0

格式函數還有一個firstweekofyear參數:vbUseSystem,vbFirstJan1,vbFirstFourDays,vbFirstFullWeek – Fionnuala 2009-10-30 13:34:50

2

「正確的結果」 取決於語言環境。也許VBA會讓你選擇一個日曆系統,否則你幾乎不走運。

請注意,First-On-xxDay不是您唯一的問題。在一個完整的週期內也有變化第一週在一個系統可能是第53周在另一個系統中。

因此,徹底測試,不要引誘「糾正1」。

+0

謝謝。關於您的筆記:對我而言,週數並不重要。它只*伴隨*日期字段。 – 2009-10-30 13:30:32

0

如果週日是一週的第一天(因爲它是在某些地區),則6是「正確的weeknumber 1/2/2009「(2009年2月1日)

5

不管星期幾的你的那一週開始,你需要傳遞明確的日期值。 「2009年1月31日」只能是一個日期(1月31日),但「1/2/2009」可能是1月2日(美國風格)或2月1日(其他人更有意義,我們USAns)。

在這種情況下,我會使用DateSerial(),以確保日期不被誤解:

Format(DateSerial(2009,2,1), "ww", vbMonday) 

雖然這不會導致你的問題,因爲Access幫忙,利用系統的本地化的日期設置,我認爲這是你應該做的事情。你肯定被迫在Access中使用SQL,所以我認爲這在代碼和表達式中是不好的習慣。

+0

謝謝大衛。我會記住這一點。 – 2009-10-31 05:45:13

1

我有同樣的問題。

這表明53周,1周,但53周和1周天都在第1周

我第一次嘗試改變訪問查詢的日期格式如下:

OrderWeek:格式([OrderDate],「yyyy-ww」,1,3)< - 但它沒有成功。 您在第52周和2015-52周獲得2014-52的日期,之前是第1周。

此外排序不是我喜歡的。它將數據分類爲2014-1,2014-11,2014-2等。我希望它顯示爲2014-01,2014-02 .. 2014-11等。

所以這裏是新的代碼顯示無論是一年中的Access查詢正確的一週:

ActualWeek: IIf(DatePart("ww",[SomeDate])=53,DatePart("yyyy",[SomeDate])+1,DatePart("yyyy",[SomeDate])) & "-" & IIf(DatePart("ww",[SomeDate])=53,"01",IIf(DatePart("ww",[SomeDate])<10,"0" & DatePart("ww",[SomeDate]),DatePart("ww",[SomeDate]))) 

現在,這顯示了來自53個星期的任何一天作爲一週的是第1部分

相關問題