例子:指定日期的獲取星期數
'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
。
那麼,我怎樣才能得到正確的結果呢?
例子:指定日期的獲取星期數
'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
。
那麼,我怎樣才能得到正確的結果呢?
在這裏做兩件事情不符合您的期望,我認爲: 假設您想讓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
+1,這是完整的答案。我希望你不介意整容編輯。 – 2009-10-30 13:31:54
一點也不,我現在輪到更新我的個人資料信息,所以我有一個正確的名字(我剛剛從superuser.com彈出並註冊回答這個問題) – AdamV 2009-10-30 13:38:38
http://www.rondebruin.nl /isodate.htm是ISO – 2009-10-30 14:02:30
這可能會實現:格式(YourDate, 「WW」,vbMonday)
哦,我明白了。謝謝Sosh。它*現在工作*:P – 2009-10-30 13:25:46
@Sosh:我很好奇看到OP預計01/05/09(1月5日09)的情況?我認爲OP可能期望1月5日是第1周,而按照你的例子,OP將是第2周。 – shahkalpesh 2009-10-30 13:30:21
格式函數還有一個firstweekofyear參數:vbUseSystem,vbFirstJan1,vbFirstFourDays,vbFirstFullWeek – Fionnuala 2009-10-30 13:34:50
「正確的結果」 取決於語言環境。也許VBA會讓你選擇一個日曆系統,否則你幾乎不走運。
請注意,First-On-xxDay不是您唯一的問題。在一個完整的週期內也有變化第一週在一個系統可能是第53周在另一個系統中。
因此,徹底測試,不要引誘「糾正1」。
謝謝。關於您的筆記:對我而言,週數並不重要。它只*伴隨*日期字段。 – 2009-10-30 13:30:32
沒有爲週數的整體標準:ISO-8601
是的,但不是所有的客戶(國家)都使用它。 – 2009-10-30 13:27:39
如果週日是一週的第一天(因爲它是在某些地區),則6是「正確的weeknumber 1/2/2009「(2009年2月1日)
不管星期幾的你的那一週開始,你需要傳遞明確的日期值。 「2009年1月31日」只能是一個日期(1月31日),但「1/2/2009」可能是1月2日(美國風格)或2月1日(其他人更有意義,我們USAns)。
在這種情況下,我會使用DateSerial(),以確保日期不被誤解:
Format(DateSerial(2009,2,1), "ww", vbMonday)
雖然這不會導致你的問題,因爲Access幫忙,利用系統的本地化的日期設置,我認爲這是你應該做的事情。你肯定被迫在Access中使用SQL,所以我認爲這在代碼和表達式中是不好的習慣。
謝謝大衛。我會記住這一點。 – 2009-10-31 05:45:13
我有同樣的問題。
這表明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部分
它只是計數星期日作爲一週的第一天,而不是星期一。 – falstro 2009-10-30 13:06:59