mktime

(PHP 4, PHP 5, PHP 7, PHP 8)

mktimeObtener la marca de tiempo Unix de una fecha

Descripción

mktime(
    int $hour = date("H"),
    int $minute = date("i"),
    int $second = date("s"),
    int $month = date("n"),
    int $day = date("j"),
    int $year = date("Y"),
    int $is_dst = -1
): int

Devuelve la marca de tiempo Unix correspondiente a los argumentos dados. Esta marca de tiempo es un entero que contiene el número de segundos entre la Época Unix (1 de Enero del 1970 00:00:00 GMT) y el instante especificado.

Los argumentos pueden omitirse de derecha a izquierda; cualquier argumento que se omita será establecido al valor actual según la fecha y hora locales.

Notas

Nota:

Desde PHP 5.1, cuando se hace la llamada sin argumentos, mktime() lanza un aviso de tipo E_STRICT: use la función time() en su lugar.

Parámetros

hour

El número de la hora relativa al inicio del día determinado por month, day y year. Los valores negativos referencian la hora antes de la media noche del día en cuestión. Los valores mayores que 23 referencian la hora apropiada en el/los día/s siguiente/s.

minute

El número de los minutos relativos al inicio de hour. Los valores negativos referencian el minuto en la hora previa. Los valores mayores que 59 referencian el minuto apropiado en la/s hora/s siguiente/s.

second

El número de segundos relativos al inicio de minute. Los valores negativos referencian el segundo en el minuto previo. Los valores mayores que 59 referencian el segundo apropiado en el/los minuto/s siguiente/s.

month

El número del mes relativo al final del año previo. Los valores de 1 a 12 referencian los meses del calendario normal del año en cuestión. Los valores menores que 1 (incluyendo valores negativos) referencian los meses del año previo en orden inverso, por lo que 0 es Diciembre, -1 es Noviembre, etc. Los valores mayores que 12 referencian el mes apropiado en el/los año/s siguiente/s.

day

El número del día relativo al final del mes previo. Los valores del 1 al 28, 29, 30 o 31 (dependiendo del mes) referencian los días normales del mes relevante. Los valores menores que 1 (incluyendo valores negativos) referencian los días del mes previo por lo que 0 es el último día del mes previo, -1 es el día anterior a ese, etc. Los valores mayores que el número de días del mes relevante referencian el día apropiado en el/los mes/es siguiente/s.

year

El número del año, puede ser un valor de dos o cuatro dígitos, con valores entre 0-69 mapeados a 2000-2069 y 70-100 a 1970-2000. En sistemas donde time_t es un entero con signo de 32 bits, como es lo más normal hoy en día, el rango válido para year es entre 1901 y 2038. Sin embargo, antes de PHP 5.1.0 este rango estaba limitado desde 1970 a 2038 en algunos sistemas (p.ej. Windows).

is_dst

Este parámetro se puede establecer a 1 si el instante está durante el horario de verano (DST), 0 si no, o -1 (por omisión) si no se sabe si el instante está durante el horario de verano. Si no se sabe, PHP lo intentará calcular por sí mismo. Esto puede causar resultados inesperados (pero no incorrectos). Algunas veces no son válidos si DST está habilitado en el sistema donde se ejecuta PHP o is_dst está establecido a 1. Si DST está habilitado a, p.ej. 2:00, todas las horas entre las 2:00 y las 3:00 no son válidas y mktime() devuelve un valor indefinido (normalmente negativo). Algunos sistemas (p.ej. Solaris 8) habilitan DST a la medianoche por lo que la hora 0:30 del día, cuando DST está habilitado, es evaluada como 23:30 del día anterior.

Nota:

A partir de PHP 5.1.0, este parámetro se volvió obsoleto. Como resultado, se pueden usar en su lugar las nuevas características de manejo de zonas horarias.

Nota:

Este parámetro ha sido eliminado en PHP 7.0.0.

Valores devueltos

mktime() devuelve la marca de tiempo Unix de los argumentos dados. Si los argumentos no son válidos, la función devuelve false (antes de PHP 5.1 devolvía -1).

Errores/Excepciones

Cada vez que se llame a una función de fecha/hora se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se emplea la configuración del sistema o la variable global TZ. Véase también date_default_timezone_set()

Historial de cambios

Versión Descripción
7.0.0 El parámetro is_dst ha sido eliminado.
5.3.0 mktime() ahora lanza un aviso de tipo E_DEPRECATED si se usa el parámetro is_dst.
5.1.0 El parámetro is_dst se volvió obsoleto. Hacía que la funcion devolviese false si se pruducía un error, en vez de -1. Arreglada la función para que acepte el año, mes y día pasados como cero.
5.1.0 Cuando se hace la llamada sin argumento, mktime() lanza un aviso E_STRICT. Use la función time() en su lugar.
5.1.0

Ahora muestra un error E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo básico de mktime()

<?php
// Establecer la zona horaria predeterminada a usar. Disponible desde PHP 5.1
date_default_timezone_set('UTC');

// Imprime: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

// Imprime algo como: 2006-04-05T01:02:03+00:00
echo date('c'mktime(123452006));
?>

Ejemplo #2 Ejemplo de mktime()

mktime() es útil para hacer que las fechas sean aritméticas y válidas, ya que calculará automáticamente el valor correcto para las entradas que estén fuera de rango. Por ejemplo, cada una de las líneas siguientes producirá la cadena "Jan-01-1998".

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Ejemplo #3 El último día del mes

El último día de cualquier mes dado se puede expresar como el día "0" del mes siguiente, no el día -1. Los dos ejemplos siguientes producirán la cadena "El último día en Feb 2000 es: 29".

<?php
$último_día 
mktime(000302000);
echo 
strftime("El último día en Feb 2000 es: %d"$último_día);
$último_día mktime(0004, -312000);
echo 
strftime("El último día en Feb 2000 es: %d"$último_día);
?>

Notas

Precaución

Antes de PHP 5.1.0, las marcas de tiempo negativas no estaban soportadas bajo ninguna versión de Windows conocida, y tampoco en otros sistemas. Por lo tanto el rango de años válidos estaba limitado desde 1970 hasta 2038.

Ver también

  • checkdate() - Validar una fecha gregoriana
  • gmmktime() - Obtener la marca temporal de Unix para una fecha GMT
  • date() - Dar formato a la fecha/hora local
  • time() - Devuelve la fecha Unix actual