PHP DataHora

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 DateTimeclasse. 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 DateTimeobjeto 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 DateTimeZoneobjeto e passa-o para o setTimezone()método do DateTimeobjeto:

<?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 DateTimeZoneobjeto 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 DateTimeobjeto, 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 AMLinguagem 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 AMLinguagem 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 AMLinguagem de código:  PHP  ( php )

Como os métodos setDate(), setTime()e setTimeZone()retornam o DateTimeobjeto, 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 PMLinguagem 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, 2021Linguagem 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, 2021Linguagem 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, 2021Linguagem de código:  PHP  ( php )

A melhor maneira de fazer isso é usar o createFromFormat()método estático do DateTimeobjeto:

<?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); // 1Linguagem 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 DateIntervalobjeto. 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 DateIntervalrepresenta as diferenças entre duas datas no ano, mês, dia, hora, etc. Para formatar a diferença, você usa o DateIntervalformato ‘. 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 daysLinguagem 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 DateIntervalobjeto 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/2022Linguagem 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 DateTimeobjeto, você cria um intervalo negativo e usa o add()método.

Resumo

  • Use a DateTimeclasse para trabalhar com a data e a hora.
  • Use a DateTimeZoneclasse para trabalhar com fusos horários.
  • Use os operadores de comparação para comparar dois DateTimeobjetos.
  • Use o diff()método para calcular a diferença entre DateTimeobjetos.
  • Use a DateIntervalclasse para representar um intervalo de data e hora.
  • Use o add()método para adicionar ou subtrair um intervalo de um DateTimeobjeto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *