W3docs

gmmktime()

Qué es la función gmmktime() de PHP: genera timestamps Unix a partir de componentes de fecha y hora interpretados en GMT/UTC.

¿Qué es la función gmmktime() de PHP?

La función gmmktime() de PHP construye un timestamp Unix a partir de las partes individuales de una fecha y hora (hora, minuto, segundo, mes, día, año), interpretando esas partes como GMT/UTC en lugar de la zona horaria local del servidor. Un timestamp Unix es simplemente el número de segundos transcurridos desde el 1 de enero de 1970, 00:00:00 UTC, el valor que la mayoría de las funciones de fecha de PHP usan internamente.

Esta página cubre la sintaxis y los parámetros de la función, cómo se diferencia de mktime(), cómo los valores fuera de rango se ajustan automáticamente, y el problema que afecta a la mayoría: en PHP moderno los parámetros no son todos opcionales.

El nombre se lee como greenwich mean time + make time.

Sintaxis

gmmktime(
    int $hour = current,
    ?int $minute = current,
    ?int $second = current,
    ?int $month = current,
    ?int $day = current,
    ?int $year = current
): int|false

Devuelve el timestamp como un entero, o false si los argumentos describen una hora no válida.

Parámetros

ParámetroSignificado
hourHoras, 0–23 (obligatorio desde PHP 8.0).
minuteMinutos, 0–59.
secondSegundos, 0–59.
monthNúmero de mes, 1–12.
dayDía del mes, 1–31.
yearAño con 4 dígitos.

Advertencia: En PHP 8.0 y versiones posteriores, llamar a gmmktime() sin argumentos lanza un ArgumentCountErrorhour es obligatorio. Cualquier argumento que se omita toma por defecto el valor correspondiente de la hora GMT actual. Para obtener el timestamp de "ahora", use time() en su lugar.

Ejemplo básico

php— editable, runs on the server

Esto genera el timestamp Unix para el 3 de marzo de 2023 a las 12:30:00 PM GMT. Para leerlo en un formato legible, combínelo con gmdate():

<?php

$timestamp = gmmktime(12, 30, 0, 3, 3, 2023);
echo gmdate('Y-m-d H:i:s', $timestamp);
// 2023-03-03 12:30:00

gmmktime() vs. mktime()

gmmktime() y mktime() aceptan exactamente los mismos argumentos y devuelven un timestamp Unix; la única diferencia es la zona horaria en la que se interpretan las partes. gmmktime() las trata como GMT/UTC; mktime() las trata como la zona horaria local del servidor. Con los mismos valores de entrada producen timestamps distintos cuando la hora local difiere de UTC:

<?php

date_default_timezone_set('America/New_York'); // UTC-4 in June

echo gmmktime(12, 0, 0, 6, 15, 2023), "\n"; // 1686830400  (12:00 UTC)
echo mktime(12, 0, 0, 6, 15, 2023), "\n";    // 1686844800  (12:00 New York = 16:00 UTC)

Use gmmktime() cuando sus entradas ya estén en UTC (timestamps de una API, una base de datos almacenada en UTC, etc.) para que el resultado no varíe con la configuración de zona horaria del servidor.

Los valores fuera de rango se ajustan automáticamente

No es necesario mantener las partes dentro de sus rangos normales. gmmktime() las normaliza, lo que resulta muy útil para la aritmética de fechas sin tener que hacer ajustes manuales:

<?php

// Month 13 rolls into the next year
echo gmdate('Y-m-d', gmmktime(0, 0, 0, 13, 1, 2023)), "\n"; // 2024-01-01

// Day 32 of January becomes February 1st
echo gmdate('Y-m-d', gmmktime(0, 0, 0, 1, 32, 2023)), "\n"; // 2023-02-01

// Hour 25 rolls into the next day at 01:00
echo gmdate('Y-m-d H:i', gmmktime(25, 0, 0, 1, 1, 2023)), "\n"; // 2023-01-02 01:00

Esto hace que expresiones como gmmktime(0, 0, 0, $month, $day + 7, $year) ("siete días después") funcionen correctamente al cruzar límites de mes y año.

Cuándo usar gmmktime()

  • Consistencia de zona horaria. Como siempre usa UTC, los mismos argumentos producen el mismo timestamp en cualquier servidor, independientemente de date.timezone.
  • Construir timestamps a partir de partes. Cuando se tienen valores separados de hora/día/mes (por ejemplo, de un formulario o una cadena analizada) en lugar de una cadena de fecha completa. Para una cadena de fecha completa como "2023-03-03 12:30", use strtotime().
  • Aritmética de fechas mediante ajuste automático. Sume o reste a un componente y deje que la función normalice el resultado.

Si solo necesita validar que una combinación de mes/día/año es una fecha real del calendario, consulte checkdate().

Conclusión

gmmktime() convierte componentes de fecha y hora separados en un timestamp Unix basado en UTC. Sus principales ventajas son la independencia de la zona horaria y la normalización automática de valores fuera de rango. Recuerde que, a diferencia de versiones anteriores de PHP, PHP 8+ requiere al menos el argumento hour, use mktime() cuando sus entradas estén en hora local y gmdate() para formatear el resultado.

Práctica

Práctica
¿Cuál es el propósito de la función gmmktime() en PHP?
¿Cuál es el propósito de la función gmmktime() en PHP?
Was this page helpful?