PHP 8.4.1 Released!

strtotime

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

strtotimeInterpreta qualquer descrição textual de data/hora em inglês para timestamp Unix

Descrição

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

A função espera que seja informada uma string contendo um formato de data em inglês US, e tentará interpretá-lo para um timestamp Unix (o número de segundos desde 1º de janeiro de 1970 00:00:00 GMT), relativo ao timestamp dado em baseTimestamp, ou o horário atual se baseTimestamp não for fornecido. A interpretação da string de data está definida em Formatos de Data e Horário, e tem várias considerações sutis. Rever os detalhes completos dessas definições é fortemente recomendado.

Aviso

O timestamp Unix que esta função retorna não contém informação sobre fuso horário. Para realizar cálculos com informação de data/hora, deve-se usar a classe com mais capacidade DateTimeImmutable.

Cada parâmetro desta função utiliza o fuso horário padrão, a não ser que um fuso horário seja especificado neste parâmetro. Tome cuidado para não utilizar fusos horários diferentes em cada um dos parâmetros a não ser que seja o pretendido. Veja a função date_default_timezone_get() para verificar as diversas formas de definir um fuso horário padrão.

Parâmetros

datetime

Uma string de data/hora. Os formatos válidos são explicados em Formatos de Data e Hora.

baseTimestamp

O timestamp que será utilizado como base no cálculo das datas relativas.

Valor Retornado

Retorna um timestamp em sucesso, false caso contrário.

Erros/Exceções

Toda chamada a uma função de data/hora gerará um E_WARNING se o fuso horário não for válido. Veja também date_default_timezone_set()

Registro de Alterações

Versão Descrição
8.0.0 baseTimestamp agora pode ser nulo.

Exemplos

Exemplo #1 Exemplo da função 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";
?>

Exemplo #2 Checando por falha

<?php
$str
= 'Not Good';

if ((
$timestamp = strtotime($str)) === false) {
echo
"The string ($str) is bogus";
} else {
echo
"$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>

Notas

Nota:

Data "relativa" neste caso também significa que se um componente em particular do timestamp de data/hora não for fornecido, ele será removido literalmente do parâmetro baseTimestamp. Isto é, strtotime('February'), se executado em 31 de maio de 2022, será interpretado como 31 de fevereiro de 2022, o que vai transferir para um timestamp de 3 de março (em um ano bissexto, seria 2 de março). Usar strtotime('1 February') ou strtotime('first day of February') evitaria este problema.

Nota:

Se o número do ano for especificado no formato com dois dígitos, o valor entre 00-60 será mapeado para 2000-2069 e 70-99 para 1970-1999. Veja as notas a seguir para possíveis diferenças em sistemas de 32 bits (as datas possíveis acabam em 2038-01-19 03:14:07),

Nota:

O intervalo válido de um timestamp é tipicamente de Sex, 13 Dez 1901 20:45:54 GMT até Ter, 19 Jan 2038 03:14:07 GMT. Estas são datas que correspondem aos valores máximos e mínimos para um inteiro sem sinal em sistemas de 32 bits.

Em versões do PHP em 64 bits, a faixa válida de um timestamp é praticamente infinita, já que 64 bits podem representar aproximadamente 293 bilhões de anos em ambas direções.

Nota:

O uso desta função para operações matemáticas não é recomendado. É melhor utilizar os métodos DateTime::add() e DateTime::sub().

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
10
Vyacheslav Belchuk
1 year 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
6
info at pipasjourney dot com
1 year 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
elsiland at yahoo dot com
1 month 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
7 months 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