2009-10-30 15 views

Respuesta

25

Hace dos cosas aquí que no coinciden con sus expectativas, creo que: Suponiendo que desea la semana con 1 de enero como semana 1, y utilizando el domingo como primer día de la semana Así que tiene la semana 1 desde el domingo 28 de diciembre de 2008 hasta el sábado 3r d enero de 2009.

La semana 6 comenzaría el domingo 1 de febrero con este método.

El estándar ISO es para la semana 1 el que contiene 4 días de enero o el primer jueves del año (diferentes formas de expresar lo mismo). Puede especificar este método de cálculo y el primer día de la semana:

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

ver aquí por la sintaxis:

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

+0

+1, esta es la respuesta completa. Espero que no te importe la edición cosmética. –

+0

No, en absoluto, y ahora me puse a actualizar la información de mi perfil, así que tengo un nombre propio (me acabo de pasar de superuser.com y me suscribí para contestar esta) – AdamV

+0

http://www.rondebruin.nl /isodate.htm es otra buena referencia para ISO –

5

Esto podría funcionar: Formato (YourDate, "WW", vbMonday)

+0

oh, ya veo. Gracias Sosh. * Funciona * ahora :-P –

+0

@Sosh: Tengo curiosidad por saber qué espera el OP para el 01/05/09 (5 de enero de 2009). Creo que OP podría esperar que el 5 de enero sea la semana 1, mientras que será la semana 2 según tu ejemplo. – shahkalpesh

+0

También hay un argumento de la primera semana de año para la función de formato: vbUseSystem, vbFirstJan1, vbFirstFourDays, vbFirstFullWeek – Fionnuala

2

"Resultado correcto" depende de la configuración regional. Quizás VBA te permita elegir un sistema de calendario, de lo contrario, no tienes suerte.

Tenga en cuenta que First-Day-On-xxDay no es su único problema. También hay una variación de lo que es una semana completa, así que Semana 1 en un sistema podría ser Semana 53 del año anterior en otro sistema.

Así que pruébelo bien y no se deje seducir por "corregir por 1".

+0

gracias. Acerca de su nota: el número de la semana, para mí, no es crítico. Solo * acompaña * un campo de fecha. –

0

si el domingo es el primer día de la semana (como lo es en algunos lugares) y luego 6 es la WeekNumber correcta para " 1/2/2009 "(1. ° de febrero de 2009)

5

Sin importar el día de la semana el comienzo de la semana en adelante, necesita pasar valores de fecha no ambiguos. "31/1/2009" solo puede ser una fecha (31 de enero), pero "1/2/2009" podría ser el 2 de enero (estilo de EE. UU.) O el 1 de febrero (todos los demás que tengan más sentido que nosotros los EE. UU.).

En este caso, me gustaría usar SerieFecha() para asegurarse de que la fecha no se malinterprete:

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

Si bien esto no está causando el problema, porque Access utiliza amablemente ajustes de fecha localizadas de su sistema, lo creo que es algo que debes hacer de todos modos. Ciertamente estás obligado a hacerlo en SQL en Access, así que no creo que sea un mal hábito en el código y las expresiones.

+0

Gracias David. Lo tendré en mente. –

1

Tuve el mismo problema.

Se mostró la semana 53 y la semana 1, pero días en la semana 53 y la semana 1 están todos en la semana 1

primera vez que trató de cambiar el formato de fecha en la consulta El acceso a este:

OrderWeek: Formato ([OrderDate], "aaaa-ww", 1,3) < - Pero no sirvió de nada. Obtiene fechas como 2014-52 para la semana 52 y 2015-52 donde era la semana 1 anterior.

También la clasificación no era como me gustaba. Clasificó los datos como 2014-1, 2014-11, 2014-2 etc. Quiero que se muestre como 2014-01, 2014-02 .. 2014-11 etc.

Así que aquí está el nuevo código para mostrar tanto el año y la semana correctamente en una consulta de 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]))) 

Esto demuestra ahora cualquier día de la semana 53 como parte de la semana 1

Cuestiones relacionadas