2009-10-30 2 views

risposta

25

Sta facendo due cose qui che non corrispondono alle tue aspettative, penso: Supponendo che tu voglia la settimana con gennaio 1 come settimana 1, e usando domenica come primo giorno della settimana Quindi ha la settimana 1 da domenica 28 dicembre 2008 a sabato 3r d gen 2009.

La settimana 6 inizierà il 1 ° febbraio di domenica con questo metodo.

Lo standard ISO è per la settimana 1 quello che contiene 4 giorni di gennaio o il primo giovedì dell'anno (diversi modi di esprimere la stessa cosa). È possibile specificare questo metodo di calcolo e il primo giorno della settimana:

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

vedi qui per la sintassi:

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

+0

+1, questa è la risposta completa. Spero non ti dispiaccia la modifica estetica. –

+0

Niente affatto, e ora ho avuto il tempo di aggiornare le mie informazioni sul profilo, così ho un nome proprio (sono appena spuntato da superuser.com e mi sono registrato per rispondere a questo) – AdamV

+0

http://www.rondebruin.nl /isodate.htm è un altro buon riferimento per ISO –

5

Questo potrebbe funzionare: Format (YourDate, "ww", vbMonday)

+0

oh, capisco. Grazie Sosh. Funziona * ora :-P –

+0

@Sosh: Sono curioso di vedere cosa si aspetta l'OP per il 01/05/09 (5 gennaio 09)? Penso che l'OP potrebbe aspettarsi che il 5 gennaio sia la settimana 1, mentre sarà la settimana 2 come da esempio. – shahkalpesh

+0

C'è anche un argomento firstweekofyear per la funzione format: vbUseSystem, vbFirstJan1, vbFirstFourDays, vbFirstFullWeek – Fionnuala

2

"Risultato corretto" dipende dal locale. Forse VBA ti permetterà di scegliere un sistema di calendario, altrimenti sei praticamente sfortunato.

Nota che First-Day-On-xxDay non è il tuo unico problema. C'è anche una variazione su cosa è una settimana completa così settimana 1 in un sistema potrebbe essere settimana 53 dell'anno precedente in un altro sistema.

Quindi testare accuratamente e non essere sedotto a "correggere di 1".

+0

grazie. Informazioni sulla tua nota: il numero della settimana, per me, non è critico. Solo * accompagna * un campo data. –

0

Se domenica è il primo giorno della settimana (come è in alcuni locali) allora 6 è la weeknumber corretto per " 1/2/2009 "(1 febbraio 2009)

5

A prescindere dal giorno della settimana vostra settimana inizia, è bisogno di passare valori di data non ambigui. "31/1/2009" può essere una sola data (31 gennaio), ma "1/2/2009" potrebbe essere il 2 gennaio (stile USA) o il 1 ° febbraio (tutti gli altri che hanno più senso che noi americani).

In questo caso, mi piacerebbe utilizzare DateSerial() per assicurarsi che la data non è male interpretato:

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

Anche se questo non sta causando il problema, perché Access utilizza utilmente impostazioni di data localizzate del sistema, ho pensa che sia qualcosa che dovresti fare comunque. Sicuramente sei obbligato a farlo in SQL in Access, quindi non penso che sia una cattiva abitudine nel codice e nelle espressioni.

+0

Grazie David. Lo terro 'a mente. –

1

Ho avuto lo stesso problema.

ha mostrato la settimana 53 e la settimana 1, eppure giorni a settimana 53 e la settimana 1 sono tutti in settimana 1

un primo momento ho provato a cambiare il formato della data in Access Query per questo:

OrderWeek: Format ([OrderDate], "yyyy-ww", 1,3) < - Ma non ha funzionato. Ottieni date come 2014-52 per la settimana 52 e 2015-52 dove era la prima settimana prima.

Anche l'ordinamento non era il modo in cui mi piaceva. Ha ordinato i dati come 2014-1, 2014-11, 2014-2 ecc. Voglio mostrarlo come 2014-01, 2014-02 .. 2014-11 ecc.

Quindi ecco il nuovo codice da visualizzare sia l'anno e la settimana correttamente in un Access Query:

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]))) 

Questo dimostra ora eventuali giorni dalla settimana 53 come parte della settimana 1