2011-09-30 21 views
7

Me he encontrado con un problema interesante al utilizar la función date() de PHP. No he tenido la suerte de encontrar una discusión sobre esto en SO o usando Google, pero tal vez alguien más haya tenido el mismo problema antes?Obteniendo el año y la semana del año desde la fecha de PHP() cuando la semana abarca dos años

Estoy tratando de obtener el AÑO y la SEMANA DEL AÑO para una fecha y hora determinada. Este es el código que estoy utilizando:

date("Y-\WW");

que da salida a partir de hoy correctamente: 2011-W39.

El problema es cuando se suministra una marca de tiempo, si la marca de tiempo en cuestión es, por ejemplo, el 3 de enero de 2011 (que en realidad era parte de la "52ª semana de 2010." PHP devuelve W52 correctamente, pero también devuelve 2011 como el año, en lugar de 2010.

date("Y-\WW", 1294016400);

Salidas: 2011-W52

Cualquier idea sobre cómo solucionar este problema que debe tener en cuenta que, si bien en este caso sería fácil simplemente comparar eso? el strtotime() de la salida es mayor que elactualy ajustar, pero necesito una solución que funcione también para años anteriores (p. si lo mismo sucedió el 3 de enero de 2010).

+2

Acabo de probar [ 'date ("Y- \ WW", 1294016400)' en Ideone y consigo '2011-W01 '] (http://ideone.com/HWyeo). – JRL

+0

Puede ser una zona horaria o una configuración regional. He respondido la pregunta a continuación, debería haber estado usando el recién agregado 'o' en lugar de' Y'. –

Respuesta

23

Darn, al parecer, que no volvió a leer la documentación con suficiente atención, la carta se añadió o en PHP 5.1.0:

De la documentación para date():

ISO-8601 año número. Tiene el mismo valor que Y, excepto que si el número de semana ISO (W) pertenece al año anterior o al año siguiente, ese año se usa en su lugar. (Añadido en PHP 5.1.0)

Así que mi código debe haber sido date("o-\WW");

+1

Cuando me encontré con este problema, no podría haber soñado con encontrar una pregunta ASÍ con exactamente la misma preocupación y una respuesta tan simple (tampoco leí los documentos con suficiente atención). Muchas gracias ! – neemzy

Cuestiones relacionadas