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
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
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:
© 2015-<?php echo date('Y');?>
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
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;
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
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;
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;
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;
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);
}
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);
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);
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;
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)