strtotime

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

strtotimeTransforma un texto inglés en timestamp

Descripción

strtotime(string $datetime, ?int $baseTimestamp = null): int|false

La función strtotime() intenta leer una fecha en formato inglés proporcionada por el parámetro time, y transformarla en un timestamp Unix (el número de segundos desde el 1 de enero de 1970 a 00:00:00 UTC), relativo al timestamp baseTimestamp, o a la fecha actual si este último es omitido. El análisis de la cadena de fecha está definido en los formatos de fecha y hora y presenta varias consideraciones sutiles. Se recomienda encarecidamente examinar todos los detalles.

Advertencia

El timestamp Unix que devuelve esta función no contiene información sobre los husos horarios. Para realizar cálculos con información de fecha/hora, es preferible utilizar DateTimeImmutable que es más capaz.

Cada parámetro de la función utiliza el desplazamiento horario por defecto a menos que se especifique explícitamente un desplazamiento horario. Tenga cuidado de no utilizar un desplazamiento horario diferente para cada parámetro a menos que sea lo que se necesita. Consulte la función date_default_timezone_get() para saber cómo definir un desplazamiento horario por defecto.

Parámetros

datetime

Una cadena de fecha/hora. Los formatos válidos se explican en Formatos de fecha y hora.

baseTimestamp

El timestamp, que representa la fecha actual, utilizado para el cálculo relativo de fechas.

Valores devueltos

Devuelve un timestamp en caso de éxito, false en caso contrario.

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
8.0.0 baseTimestamp ahora es nullable.

Ejemplos

Ejemplo #1 Ejemplo con strtotime()

<?php
echo strtotime("now"), "\n";
echo
strtotime("10 September 2000"), "\n";
echo
strtotime("+1 day"), "\n";
echo
strtotime("+1 week"), "\n";
echo
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo
strtotime("next Thursday"), "\n";
echo
strtotime("last Monday"), "\n";
?>

Ejemplo #2 Verificación de error

<?php
$str
= 'No es válido';

if ((
$timestamp = strtotime($str)) === false) {
echo
"La cadena ($str) está corrupta";
} else {
echo
"$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>

Notas

Nota:

En este caso, la fecha "relativa" significa también que si un componente particular del timestamp no es proporcionado, será extraído textualmente de baseTimestamp. En otras palabras, strtotime('February'), si se ejecuta el 31 de mayo de 2022, será interpretado como el 31 de febrero de 2022, lo que desbordará a un timestamp el 3 de marzo. (En un año bisiesto, sería el 2 de marzo.) El uso de strtotime('1 February') o strtotime('first day of February') evitaría este problema.

Nota:

Si el número de años se especifica en dos dígitos, los valores entre 00-69 corresponden a 2000-2069 y 70-99 a 1970-1999. Consulte las notas posteriores sobre las posibles diferencias entre sistemas de 32 bits (las fechas pueden fallar después del 19/01/2038 a 03:14:07).

Nota:

El intervalo de validez de un timestamp va del Viernes 13 de diciembre de 1901 20:45:54 UTC al Martes 19 de enero de 2038 03:14:07 UTC. (Esto corresponde a las fechas máximas y mínimas para un entero de 32 bits firmado).

Para las versiones de 64 bits de PHP, el intervalo válido de un timestamp es realmente infinito, sabiendo que 64 bits puede representar aproximadamente 293 mil millones de años en cualquier dirección.

Nota:

El uso de esta función en operaciones matemáticas no está recomendado. Es preferible utilizar en este caso DateTime::add() y DateTime::sub().

Ver también

add a note

User Contributed Notes 5 notes

up
15
Vyacheslav Belchuk
2 years ago
Be careful when using two numbers as the year. I came across this situation:

<?php

echo strtotime('24.11.22');
echo
date('d.m.Y H:i:s', 1669324282) . "\n\n";

// But
echo strtotime('24.11.2022');
echo
date('d.m.Y H:i:s', 1669237200);

?>

Output:

1669324282
25.11.2022 00:11:22

1669237200
24.11.2022 00:00:00
up
12
info at pipasjourney dot com
2 years ago
Be aware of this: 1 month before the 31st day, it will return the same month:

<?php
echo date('m', strtotime('2023-05-30 -1 month')) ; //returns 04
echo date('m', strtotime('2023-05-31 -1 month')) ; //returns 05, not 04
?>

So, don't use this to operate on the month of the result.
A better way to know what month was the previous month would be:

<?php
//considering today is 2023-05-31...

$firstOfThisMonth = date('Y-m') . '-01'; //returns 2023-05-01
echo date('m', strtotime($firstOfThisMonth . ' -1 month')) ; //returns 04
?>
up
1
event at mail dot de
6 months ago
'timestamp_sdt' for counting from zero hours of a specific day

<?php

echo $timestamp_sdt = strtotime(date('d.m.Y',time()).'00.00.00')*1000; echo '<br><br>';

echo
date('d.m.Y H.i.s', $timestamp_sdt/1000); echo '<br><br>';

?>

will give out:

1734649200000

20.12.2024 00.00.00
up
2
elsiland at yahoo dot com
8 months ago
Not sure why, but
<?php
echo strtotime("+2 hours"), "\n";
echo
strtotime("+2 hrs"), "\n";
echo
strtotime("+2 hourss"), "\n";
?>

are returning +2 hours, -2 hours, +8 hours. The latter two should be errors instead.
up
0
et dot coder at gmail dot com
1 year ago
> The Unix timestamp that this function returns does not contain information about time zones. In order to do calculations with date/time information, you should use the more capable DateTimeImmutable.

important - does not contain

<?php
date_default_timezone_set
('Europe/Berlin');

// .... a lot of code

echo $a = strtotime('yesterday 00:00');

// in $a hour = 23:00:00 and you may not know about it
// https://onlinephp.io/c/ef696
// use DateTimeImmutable
To Top