Resumo : neste tutorial você aprenderá como trabalhar com data e hora de forma orientada a objetos.
Introdução à classe PHP DateTime
PHP fornece um conjunto de classes de data e hora que permitem trabalhar com data e hora de forma orientada a objetos.
Para criar um novo objeto de data e hora, você usa a DateTime
classe. Por exemplo:
<?php
$datetime = new DateTime();
var_dump($datetime);
Linguagem de código: PHP ( php )
Saída:
object(DateTime)#1 (3) {
["date"]=> string(26) "2021-07-15 06:30:40.294788"
["timezone_type"]=> int(3)
["timezone"]=> string(13) "Europe/Berlin"
}
Linguagem de código: PHP ( php )
O DateTime
objeto representa a data e hora atuais no fuso horário especificado no arquivo de configuração do PHP ( php.ini
)
Para definir um novo fuso horário, você cria um novo DateTimeZone
objeto e passa-o para o setTimezone()
método do DateTime
objeto:
<?php
$datetime = new DateTime();
$timezone = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($timezone);
var_dump($datetime);
Linguagem de código: PHP ( php )
Saída:
object(DateTime)#1 (3) {
["date"]=> string(26) "2021-07-14 21:33:27.986925"
["timezone_type"]=> int(3)
["timezone"]=> string(19) "America/Los_Angeles"
}
Linguagem de código: PHP ( php )
Neste exemplo, criamos um novo DateTimeZone
objeto e o configuramos como "America/Los_Angeles"
. Para obter fusos horários válidos suportados pelo PHP, verifique a lista de fusos horários .
Para formatar um DateTime
objeto, você usa o format()
método. Os parâmetros da string de formato são os mesmos usados para a date()
função. Por exemplo:
<?php
$datetime = new DateTime();
echo $datetime->format('m/d/Y g:i A');
Linguagem de código: PHP ( php )
Saída:
07/15/2021 6:38 AM
Linguagem de código: PHP ( php )
Para definir uma data e hora específicas, você pode passar uma string de data e hora para o DateTime()
construtor assim:
<?php
$datetime = new DateTime('12/31/2019 12:00 PM');
echo $datetime->format('m/d/Y g:i A');
Linguagem de código: PHP ( php )
Ou você pode usar a setDate()
função para definir uma data:
<?php
$datetime = new DateTime();
$datetime->setDate(2020, 5, 1);
echo $datetime->format('m/d/Y g:i A');
Linguagem de código: PHP ( php )
Saída:
05/01/2020 6:42 AM
Linguagem de código: PHP ( php )
A hora é derivada da hora atual. Para definir a hora, você usa a setTime()
função:
<?php
$datetime = new DateTime();
$datetime->setDate(2020, 5, 1);
$datetime->setTime(5, 30, 0);
echo $datetime->format('m/d/Y g:i A');
Linguagem de código: PHP ( php )
Saída:
05/01/2020 5:30 AM
Linguagem de código: PHP ( php )
Como os métodos setDate()
, setTime()
e setTimeZone()
retornam o DateTime
objeto, você pode encadeá-los assim, o que é bastante conveniente.
<?php
$datetime = new DateTime();
echo $datetime->setDate(2020, 5, 1)
->setTime(5, 30)
->setTimezone(new DateTimeZone('America/New_York'))
->format('m/d/Y g:i A');
Linguagem de código: PHP ( php )
Saída:
04/30/2020 11:30 PM
Linguagem de código: PHP ( php )
Criando um objeto DateTime a partir de uma string
Quando você passa a string de data ’06/08/2021′ para o DateTime()
construtor ou setDate()
função, o PHP a interpreta como m/d/Y
. Por exemplo:
<?php
$datetime = new DateTime('06/08/2021');
echo $datetime->format('F jS, Y');
Linguagem de código: PHP ( php )
Saída:
June 8th, 2021
Linguagem de código: PHP ( php )
Se quiser passar para 6 de agosto de 2021, você precisa usar o – ou. em vez de /. Por exemplo:
<?php
$datetime = new DateTime('06-08-2021');
echo $datetime->format('F jS, Y');
Linguagem de código: PHP ( php )
Saída:
August 6th, 2021
Linguagem de código: PHP ( php )
No entanto, se você deseja analisar a string de data ’06/08/2021′ como d/m/Y, você precisa substituir / por – ou . manualmente:
<?php
$ds = '06/08/2021';
$datetime = new DateTime(str_replace('/', '-', $ds));
echo $datetime->format('F jS, Y');
Linguagem de código: PHP ( php )
Saída:
August 6th, 2021
Linguagem de código: PHP ( php )
A melhor maneira de fazer isso é usar o createFromFormat()
método estático do DateTime
objeto:
<?php
$ds = '06/08/2021';
$datetime = DateTime::createFromFormat('d/m/Y', $ds);
echo $datetime->format('F jS, Y');
Linguagem de código: PHP ( php )
Neste exemplo, passamos o formato da data como primeiro argumento e a string da data como segundo argumento.
Observe que quando você passa uma string de data sem a hora, o DateTime()
construtor usa meia-noite. No entanto, o createFromFormat()
método usa a hora atual.
Comparando dois objetos DateTime
PHP permite que você compare dois objetos DateTime usando operadores de comparação, incluindo >, >=, <, <=, ==, <=>. Por exemplo:
<?php
$datetime1 = new DateTime('01/01/2021 10:00 AM');
$datetime2 = new DateTime('01/01/2021 09:00 AM');
var_dump($datetime1 < $datetime2); // false
var_dump($datetime1 > $datetime2); // true
var_dump($datetime1 == $datetime2); // false
var_dump($datetime1 <=> $datetime2); // 1
Linguagem de código: PHP ( php )
Calculando as diferenças entre dois objetos DateTime
O diff()
método do DateTime()
objeto retorna a diferença entre dois DateTime()
objetos como um DateInterval
objeto. Por exemplo:
<?php
$dob = new DateTime('01/01/1990');
$to_date = new DateTime('07/15/2021');
$age = $to_date->diff($dob);
var_dump($age);
Linguagem de código: PHP ( php )
Saída:
object(DateInterval)#3 (16) {
["y"]=> int(31)
["m"]=> int(6)
["d"]=> int(14)
["h"]=> int(0)
["i"]=> int(0)
["s"]=> int(0)
["f"]=> float(0)
["weekday"]=> int(0)
["weekday_behavior"]=> int(0)
["first_last_day_of"]=> int(0)
["invert"]=> int(1)
["days"]=> int(11518)
["special_type"]=> int(0)
["special_amount"]=> int(0)
["have_weekday_relative"]=> int(0)
["have_special_relative"]=> int(0)
}
Linguagem de código: PHP ( php )
O DateInterval
representa as diferenças entre duas datas no ano, mês, dia, hora, etc. Para formatar a diferença, você usa o DateInterval
formato ‘. Por exemplo:
<?php
$dob = new DateTime('01/01/1990');
$to_date = new DateTime('07/15/2021');
echo $to_date->diff($dob)->format('%Y years, %m months, %d days');
Linguagem de código: PHP ( php )
Saída:
31 years, 6 months, 14 days
Linguagem de código: PHP ( php )
Confira todos os parâmetros do formato DateInterval .
Adicionando um intervalo a um objeto DateTime
Para adicionar um intervalo até a data, você cria um novo DateInterval
objeto e passa-o para o add()
método. O exemplo a seguir adiciona 1 ano e 2 meses à data 01/01/2021
:
<?php
$datetime = new DateTime('01/01/2021');
$datetime->add(new DateInterval('P1Y2M'));
echo $datetime->format('m/d/Y');
Linguagem de código: PHP ( php )
Saída:
03/01/2022
Linguagem de código: PHP ( php )
Para formatar um intervalo de datas, você usa as strings de formato de intervalo de datas .
Para subtrair um intervalo de um DateTime
objeto, você cria um intervalo negativo e usa o add()
método.
Resumo
- Use a
DateTime
classe para trabalhar com a data e a hora. - Use a
DateTimeZone
classe para trabalhar com fusos horários. - Use os operadores de comparação para comparar dois
DateTime
objetos. - Use o
diff()
método para calcular a diferença entreDateTime
objetos. - Use a
DateInterval
classe para representar um intervalo de data e hora. - Use o
add()
método para adicionar ou subtrair um intervalo de umDateTime
objeto.