W3docs

date_isodate_set()

Aprende la función PHP date_isodate_set(): establece una fecha en DateTime por año ISO 8601, semana y día. Sintaxis, ejemplos y relación con DateTime::setISODate().

La función date_isodate_set() establece la fecha de un object DateTime usando el calendario de semanas ISO 8601 — es decir, por año, número de semana y día de la semana, en lugar de por mes y día. Es el alias procedimental del método DateTime::setISODate(), por lo que ambos hacen exactamente lo mismo.

Esta página cubre la sintaxis de la función, cómo difiere el calendario de semanas ISO del calendario ordinario, ejemplos ejecutables y los errores más comunes.

Sintaxis

La función date_isodate_set() tiene la siguiente sintaxis:

Sintaxis de la función PHP date_isodate_set()

date_isodate_set(DateTime $object, int $year, int $week, int $dayOfWeek = 1): DateTime

donde:

  • $object — el object DateTime a modificar (se cambia en el lugar).
  • $year — el año ISO.
  • $week — el número de semana ISO, 153.
  • $dayOfWeek — el día de la semana, 1 para el lunes y 7 para el domingo (opcional, por defecto 1).

La función devuelve el mismo object DateTime, por lo que las llamadas se pueden encadenar. La llamada equivalente en orientación a objetos es:

$date->setISODate($year, $week, $dayOfWeek);

Por qué usar fechas de semana ISO

A diferencia del calendario ordinario, ISO 8601 numera cada semana del año e identifica una fecha por (año, semana, día de la semana). Esto es útil para informes de negocios, programación y cualquier sistema que piense en semanas en lugar de meses.

Vale la pena recordar dos reglas:

  • La semana 1 es la semana que contiene el primer jueves del año — equivalentemente, la semana que contiene el 4 de enero. Por ello, los primeros días de enero pueden pertenecer al año ISO anterior, y los últimos días de diciembre pueden pertenecer al siguiente.
  • Los valores fuera de rango se desbordan en lugar de lanzar un error. Pedir la semana 53 o el día 7 de una semana que no existe simplemente avanza la fecha a la semana o al año siguiente. Por ejemplo, date_isodate_set($d, 2022, 52, 7) aterriza en 2023-01-01, porque la semana 52 de 2022 termina el domingo 1 de enero de 2023.

Nota: date_isodate_set() solo cambia la parte de la fecha. La hora del día permanece tal como la tenía el DateTime (la hora actual para un object recién creado).

Ejemplos

Uso básico

Establece una fecha al 3er día (miércoles) de la 10ª semana ISO de 2023:

php— editable, runs on the server

La función cambia $date en el lugar. Partimos de una hora fija para que la salida sea la misma en cada ejecución; solo se reemplaza la parte de la fecha.

Los números de semana pueden cruzar el límite del año

Pedir el último día de la última semana de 2022 te lleva a enero de 2023 — así funciona el calendario ISO, no es un error:

php— editable, runs on the server

La semana 52 de 2022 termina el domingo 1 de enero de 2023, por lo que esa es la fecha devuelta.

Equivalente en orientación a objetos

DateTime::setISODate() hace el mismo trabajo y devuelve el object, lo que permite encadenar una llamada a format() directamente:

php— editable, runs on the server

Esto establece la fecha al 1er día (lunes) de la semana 24 de 2023.

Funciones relacionadas

  • date_create() — crea un object DateTime para pasar como argumento.
  • date_format() — formatea la fecha resultante para su visualización.

Conclusión

date_isodate_set() establece un DateTime a un (año, semana, día de la semana) específico usando el calendario de semanas ISO 8601. Recuerda que la semana ISO 1 contiene el primer jueves del año, que los valores de semana y día se desbordan hacia la semana o el año siguiente en lugar de generar un error, y que solo se cambia la fecha — no la hora.

Práctica

Práctica
¿Qué hace la función PHP date_isodate_set()?
¿Qué hace la función PHP date_isodate_set()?
Was this page helpful?