33 Votos

PHP: Determinar el Número de Semana

Tutorial de Stefan Trost | Última actualización el 03/06/2023 | Creado el 17/02/2023

Hoy, me gustaría mostrarle cómo recuperar la semana del año (número de semana) de una fecha arbitraria con PHP.

Esto es mucho más fácil de lo que podría sospechar: Solo necesitamos la función PHP date() y el carácter de formato "W" para ello. Al pasar este carácter como primer parámetro y cualquier fecha como segundo parámetro a la función date(), obtenemos como resultado la semana del calendario, respectivamente, el número de semana del año para nuestra fecha.

Aquí hay un ejemplo para esta llamada:

$fecha = time();         // fecha actual

echo date("W", $fecha);  // salida, por ejemplo: 03 o 10

De acuerdo con ISO-8601, para PHP, la semana comienza el lunes y la salida tiene formato de dos dígitos como cadena / string (así por ejemplo "01" en lugar de "1").

Si queremos tener un número de un solo dígito para los números de semana del 1 al 9, podemos escribir (int)date("W", $fecha) para obtenerlo. Con esto, el resultado de la función se convierte de una cadena (string) a un número entero (integer) cuya salida es naturalmente de un solo dígito sin ceros a la izquierda. Por supuesto, también podemos proceder del mismo modo si necesitamos la semana del calendario no como una cadena sino como un número (por ejemplo, para calcular con ella).

Año de la Semana del Año

Hay un problema que surge casi en cada cambio de año. El problema puede ocurrir siempre que la primera semana del calendario del nuevo año ya esté comenzando en diciembre o si la última semana del calendario de un año está llegando a enero. En ambos casos, el uso de date("W Y", $fecha) conduce a resultados erróneos:

$fecha = strtotime('2027-01-01');

echo date("W Y", $fecha);  // salida: 53 2027

Este ejemplo muestra lo que está fallando: Para la fecha 2027-01-01, obtenemos la semana número 53 de 2027. El motivo de ese resultado incorrecto es que "Y" nos proporciona el año de la fecha pasada - esto es 2027. Sin embargo, necesitamos 2026, porque desde el punto de vista de la semana del calendario, el 1 de enero pertenece a la última semana del último año en este caso (este caso puede ocurrir no sólo el primero de enero sino también para un 2 o 3 de enero).

Afortunadamente, los desarrolladores de PHP pensaron en este caso especial y nos otorgaron el parámetro "o" (O minúscula). Si usamos este parámetro en lugar del parámetro habitual Y para el año con la función date(), obtendremos el año adecuado para el número de semana de la fecha pasada. Aquí hay un ejemplo:

$fecha = strtotime('2027-01-01');

echo date("W o", $fecha);  // salida: 53 2026

Con este parámetro, el resultado es correcto: obtenemos la semana del calendario 53 de 2026, que finaliza en el año natural 2027 de ese año.

Por supuesto, este código también sirve para el caso contrario, es decir, en el caso de que la primera semana natural del nuevo año comience el 29, 30 o 31 de diciembre.

ResponderPositivoNegativo

Sobre el Autor

AvatarPuede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil

 

Temas Relacionados

MySQL: Saltos de Línea en MySQL

Consejo | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.