W3docs

Calendario PHP

Aprende a trabajar con fechas, horas y calendarios en PHP usando date(), mktime(), strtotime() y la clase DateTime, con ejemplos y buenas prácticas.

Introducción

Este capítulo cubre cómo trabajar con fechas, horas y calendarios en PHP. Aprenderás las funciones principales de fecha y hora, cómo construir una cuadrícula de calendario para un mes determinado y las buenas prácticas que mantienen la lógica de fechas correcta en distintas zonas horarias. Cada ejemplo es pequeño y ejecutable para que puedas pegarlo directamente en un archivo PHP.

Para un análisis más detallado de temas individuales, consulta los capítulos relacionados sobre Fecha y hora en PHP, la función date() y las zonas horarias en PHP.

Comprensión de las funciones de fecha y hora en PHP

PHP ofrece un conjunto robusto de funciones de fecha y hora para formatear, calcular y manipular fechas, horas y zonas horarias. Estas funciones son esenciales para las aplicaciones que necesitan trabajar con datos temporales, como planificadores, sistemas de reservas y, por supuesto, calendarios.

PHP también incluye una Extensión de Calendario separada (cal_days_in_month(), jdtogregorian(), entre otras) para convertir entre sistemas de calendario como el juliano, gregoriano y hebreo. Las dos se confunden con frecuencia: la Extensión de Calendario convierte entre sistemas, mientras que las funciones de fecha y hora que se describen a continuación se ocupan del formateo y la aritmética cotidianos. La mayoría de las tareas de "construir un calendario" solo necesitan las funciones de fecha y hora.

Funciones comunes de fecha y hora en PHP

  1. date() – Formatea una cadena de fecha y hora local según un formato especificado.
    echo date("Y-m-d H:i:s"); // Outputs: 2023-10-25 14:30:00
  2. mktime() – Crea un timestamp Unix para una fecha y hora especificadas.
    echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000
    Nota: mktime() depende de la zona horaria predeterminada del servidor. Para obtener resultados reproducibles, establece explícitamente una zona horaria usando date_default_timezone_set() o DateTimeZone.
  3. strtotime() – Analiza una cadena de fecha y hora en inglés y la convierte en un timestamp Unix.
    echo strtotime("now"); // Outputs: current timestamp
    echo strtotime("+1 day"); // Outputs: timestamp for tomorrow
  4. time() – Devuelve el timestamp Unix actual.
    echo time(); // Outputs: current timestamp
  5. DateTime y DateTimeImmutable – Clases orientadas a objetos para una manipulación y formateo de fecha y hora más seguros.
    $dt = new DateTime('2023-10-25 14:30:00');
    echo $dt->format('Y-m-d H:i:s');

Además de estas funciones, existen muchas otras para manipular fechas y horas. Comprender cómo funcionan te permite crear aplicaciones PHP eficientes y confiables.

¿Cuántos días tiene un mes?

Una tarea habitual en los calendarios es encontrar el número de días de un mes determinado, que varía y depende de los años bisiestos para febrero. Hay dos formas fiables de hacerlo:

// Using the Calendar Extension (requires ext-calendar)
echo cal_days_in_month(CAL_GREGORIAN, 2, 2024); // Outputs: 29 (2024 is a leap year)

// Using date() with the 't' format character (no extension needed)
echo date('t', mktime(0, 0, 0, 2, 1, 2024)); // Outputs: 29

El enfoque date('t', ...) es portable porque no depende de que la Extensión de Calendario esté instalada.

Cómo construir un calendario sencillo para un mes

Uniendo todas las piezas, aquí se muestra cómo imprimir los días de un mes alineados bajo las columnas de los días de la semana. Encontramos el primer día de la semana del mes con date('w', ...) (0 = domingo) y el número de días con date('t', ...):

$month = 10;
$year  = 2023;

$firstDayTimestamp = mktime(0, 0, 0, $month, 1, $year);
$daysInMonth       = (int) date('t', $firstDayTimestamp);
$startWeekday      = (int) date('w', $firstDayTimestamp); // 0 = Sunday

echo "Su Mo Tu We Th Fr Sa\n";

// Pad the first row so day 1 lands under the correct weekday.
echo str_repeat('   ', $startWeekday);

for ($day = 1; $day <= $daysInMonth; $day++) {
    printf('%2d ', $day);
    // Break to a new line after Saturday.
    if (($startWeekday + $day) % 7 === 0) {
        echo "\n";
    }
}
echo "\n";

Este bucle imprime octubre de 2023 como una cuadrícula de calendario. Para obtener más información sobre el bucle utilizado aquí, consulta Bucles en PHP.

Buenas prácticas para usar las funciones de fecha y hora en PHP

Al utilizar las funciones de fecha y hora de PHP, es importante seguir buenas prácticas para garantizar que tus aplicaciones sean eficientes y efectivas. A continuación se ofrecen algunos consejos a tener en cuenta:

  1. Prefiere los objetos DateTime y DateTimeImmutable sobre las funciones procedurales para mayor legibilidad y seguridad de zona horaria incorporada.
  2. Establece siempre una zona horaria explícita usando DateTimeZone o date_default_timezone_set() para evitar cambios inesperados durante el horario de verano o migraciones de servidor.
  3. Valida las fechas analizadas usando DateTime::getLastErrors() para detectar entradas no válidas a tiempo y evitar fallos silenciosos.
  4. Almacena en caché los timestamps calculados o las cadenas formateadas en bucles ajustados para reducir la sobrecarga de llamadas a funciones.

Conclusión

Las funciones de fecha y hora de PHP son una parte esencial de cualquier aplicación PHP que necesite trabajar con datos temporales. Al comprender cómo funcionan estas funciones y seguir las buenas prácticas, puedes desarrollar aplicaciones confiables y eficientes.

Práctica

Práctica
En PHP, ¿qué métodos se usan con más frecuencia para crear un calendario?
En PHP, ¿qué métodos se usan con más frecuencia para crear un calendario?
Was this page helpful?