DEV Community

Daiane Alves
Daiane Alves

Posted on • Updated on

Date and time - Manipulando datas em PHP

Trabalhar com manipulação de datas é extremamente importante no desenvolvimento, manutenção de sistemas e para facilitar nosso dia a dia. O PHP possui várias funções para trabalhar com datas.

As funções e classes relacionadas a data e hora não necessitam de instalação de extensão, pois são nativas do PHP.

Ao longo desse artigo vamos mostrar de forma conceitual e prática como utilizar estas funções e classes.

Função date()

Sintaxe

  date ( string $format [, int $timestamp = time() ] ) : string
Enter fullscreen mode Exit fullscreen mode

A função date() recebe dois parâmetros, o primeiro é uma string de formato e o segundo é o timestamp que é um valor inteiro e opcional, por isto na sintaxe ele vem entre colchetes.

Veja abaixo um exemplo de código para exibir o dia e a hora atual:

// ANO-MÊS-DIA HORA:MINUTO:SEGUNDO
echo date('Y-m-d H:i:s') . PHP_EOL;
// Saída: 2020-12-03 20:56:30
Enter fullscreen mode Exit fullscreen mode

Repare que cada letra passada como argumento tem um retorno diferente. Por exemplo, H formato de 24 horas de uma hora (00 a 23).

A seguir outras formas de formatação de saída da função date().

Caracter Descrição
d Dia do mês, 2 dígitos com zero à esquerda
D Uma representação textual de um dia, três letras
l ('L' minúsculo) A representação textual do dia da semana
z O dia do ano (iniciando em 0)
F Representação completa de um mês, como January ou March
m Representação numérica de um mês, com zero à esquerda
Y Representação de ano completa, 4 dígitos
y Representação do ano com dois dígitos

Dica

Você pode utilizar a função date() para atualizar automaticamente o ano dos direitos autorais em seu site. Veja o exemplo:

 &copy; 2015-<?php echo date('Y');?>
Enter fullscreen mode Exit fullscreen mode

Conheça agora alguns caracteres comumente usados ​​para horários:

Caracter Descrição
H formato de 24 horas de uma hora (00 a 23)
h formato de 12 horas de uma hora com zeros à esquerda (01 a 12)
i Minutos com zeros à esquerda (00 a 59)
s segundos com zeros à esquerda (00 a 59)
a Ante meridiem minúsculo e Post meridiem (am ou pm) minúsculo
A Ante meridiem minúsculo e Post meridiem (am ou pm) maiúsculo

Para exibir a hora atual no formato especificado, basta executar o código abaixo:

echo 'Em Brasíla: ' . date('H:i:s') . ' horas...' . PHP_EOL;
// exibe o horário atual do servidor
Enter fullscreen mode Exit fullscreen mode

Trabalhando com fuso horário

Se ao executar o código acima a hora exibida não estiver correta, provavelmente é porque seu servidor está configurado para um fuso horário diferente do seu.

Se você precisa que o horário esteja correto de acordo com um local específico, terá que definir o fuso horário que deseja usar utilizando a função date_default_timezone_set().

Veja um exemplo que define o fuso horário para 'America / New_York' e, em seguida, exibe a hora atual no formato especificado:

date_default_timezone_set('America/New_York');
echo 'Hora atual em Nova York: ' . date('H:i:s a') . PHP_EOL;

date_default_timezone_set('America/Sao_Paulo');
echo 'Hora atual em São Paulo: ' . date('H:i:s a') . PHP_EOL;
Enter fullscreen mode Exit fullscreen mode

Obs: É possível ver a lista de fusos horários suportados pelo DateTimeZone na própria documetação do PHP.

Outra forma de exibir a data e a hora é utilizando a função mktime(). Ela recebe como parâmetros (hora, minuto, segundo, mês, dia, ano).Note que todos os argumentos são obrigatórios. Caso você não precise usar algum deles, basta preencher com 0como vemos neste exemplo:

$date = mktime(0, 0, 00, 12, 02, 2020);
echo 'Criado em: ' . date('d-m-Y ', $date) . PHP_EOL;
// Saída: Criado em: 02-12-2020 
Enter fullscreen mode Exit fullscreen mode

DateTime

Vimos até agora o uso de algumas funções date, mas é possível também utilizar orientação a objetos para fazer essas manipulações. Com a classe DateTime podemos instanciar e obter a data e hora atuais, por exemplo.

// Pega o momento atual
$today = new DateTime();

// Exibe no formato desejado
echo $today->format('Y-m-d') . PHP_EOL;
Enter fullscreen mode Exit fullscreen mode

Observe que neste exemplo, nenhum parâmetro foi passado para o construtor da classe DateTime, então o momento atual foi exibido.

Adicionando datas

Você pode também adicionar datas de várias maneiras. Uma delas é especificando nos argumentos da classe DateTime. Ela recebe como parâmetro uma string de formato de data em inglês ou também uma string com uma data específica. Veja abaixo alguns exemplos:

$agora = new DateTime('now'); // ou sem parâmetro
$amanha = new DateTime('tomorrow');
$proximo_ano = new DateTime('next year');
$data_aleatoria = new DateTime('2000-10-10');

echo $agora->format('Y-m-d') . PHP_EOL;
echo $amanha->format('Y-m-d') . PHP_EOL;
echo $proximo_ano->format('Y-m-d') . PHP_EOL;
echo $data_aleatoria->format('Y-m-d') . PHP_EOL;
Enter fullscreen mode Exit fullscreen mode

OBS: Em PHP variáveis podem ter acento no nome mas é bom evitar para não ter problemas com diferentes codificações de caracteres em diferentes sistemas operacionais.

Adicionando datas - strtotime()

A função strtotime() recebe como parâmetro uma string de formato de data em inglês e tenta analisar esse formato. É como tentar transformar uma frase que possui possíveis informações de data em uma data real, como mostra o código a seguir:

$data = strtotime('tomorrow');
echo date('Y-m-d', $data) . PHP_EOL;

$data = strtotime('next Friday');
echo date('Y-m-d', $data) . PHP_EOL;

$data = strtotime('+3 Months');
echo date('Y-m-d', $data) . PHP_EOL;
Enter fullscreen mode Exit fullscreen mode

Agora imagine que você precise listar os próximos sábados a partir da data atual... No exemplo a seguir você consegue fazer isso facilmente utilizando a função strtotime().

Veja:

$data = strtotime('Sunday');
$data_final = strtotime('+4 weeks', $data);

while ($data < $data_final) {
  echo date('F d', $data) . PHP_EOL;
  $data = strtotime('+1 week', $data);
}
Enter fullscreen mode Exit fullscreen mode

Adicionando datas - DateTime::add

Outra forma de adicionar datas é utilizar o método add da classe DateTime. Com ele é possível acrescentar uma quantidade de dias, meses, anos, horas, minutos e segundos em um objeto DateTime passando para o método add a quantidade de períodos como no exemplo abaixo.

  • P5D: Período de cinco dias
  • P2M: Período de dois meses
  • PT10S: Período de dez segundos
  • P2YT20M: Período de dois anos e vinte minutos

Veja o como utilizar:

$diff1Year = new DateInterval('P1Y');
$diff10Hours = new DateInterval('PT10H');

// Adiciona 1 ano em $date1
$date1 = new DateTime('2020-12-02 08:00:00');
$date1->add($diff1Year);
print_r($date1);

// Adiciona 10 horas em $date2
$date2 = new DateTime('2020-12-02 08:00:00');
$date2->add($diff10Hours);
print_r($date2);
Enter fullscreen mode Exit fullscreen mode

Vimos até agora várias formas de adicionar datas e períodos usando funções e classes Date PHP. Mas, e se quiséssemos saber o intervalo entre duas datas?

Subtraindo datas

Da mesma maneira que conseguimos adicionar datas e horas, também podemos subtrair um determinado período sobre um objeto da classe DateTime utilizando a função sub(). Confira como é fácil.

$date = new DateTime();
$date->sub(new DateInterval('P10D'));
// Retorna a data atual - 10 dias
print_r($date);
Enter fullscreen mode Exit fullscreen mode

Diferença de datas

Calcular a diferença de datas no PHP é muito simples de se fazer utilizando o método diff().
Imagine que você queira descobrir quantos dias de vida tem uma pessoa...

$data1 = new DateTime('1984-01-01'); 
$data2 = new DateTime(); 
$intervalo = $data1->diff($data2); 
echo $intervalo->format('Total de dias: %a') . PHP_EOL; 
echo $intervalo->format('Anos: %y %m meses e %d dias') . PHP_EOL;
Enter fullscreen mode Exit fullscreen mode

Parabéns! Você acabou de descobrir que tem alguns muitos dias de vida.

Concluindo

Manipular datas e hora no PHP é bem fácil! Não é necessário utilizar nenhuma biblioteca externa para isso pois ele trás funções e classes nativas. Com elas você pode fazer diversas operações envolvendo comparação, adição, subtração de datas e muito mais.

Para conferir um pouco mais sobre o mundo de possibilidades de se trabalhar com datas e horas no PHP, consulte sua documentação. Lá você verá uma lista completa de funções e poderá tranquilamente realizar diversas operações.

Top comments (0)