Trabalho com datas e horas em PHP: nível avançado

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho avançado com datas e horas em PHP: do básico à maestria



Trabalhar com datas e horas é uma das tarefas mais frequentes e, ao mesmo tempo, complexas no desenvolvimento web. Desenvolvedores iniciantes geralmente se limitam às funções date() e time(), mas para criar aplicações verdadeiramente flexíveis e confiáveis, é necessário dominar a abordagem orientada a objetos. Neste artigo, abordaremos técnicas avançadas de trabalho com datas e horas em PHP que ajudarão você a escrever um código mais limpo, seguro e eficiente.



1. Classe DateTime: a base do trabalho moderno com datas



A classe DateTime é o alicerce sobre o qual se constrói todo o trabalho avançado com datas em PHP. Ao contrário das funções procedurais, ela fornece um objeto com um rico conjunto de métodos para manipulação, comparação e formatação.



Criação de objetos DateTime:

<?php// Data e hora atuais$now = new DateTime();echo $now->format('Y-m-d H:i:s'); // 2024-01-15 14:30:00

// Data específica a partir de uma string$birthday = new DateTime('1990-05-20');echo $birthday->format('d.m.Y'); // 20.05.1990

// Com formato relativo$nextWeek = new DateTime('+1 week');echo $nextWeek->format('Y-m-d');?>


Modificação de datas com os métodos modify e add/sub:

<?php$date = new DateTime('2024-01-15');

// Usando modify para alterações complexas$date->modify('last day of next month');echo $date->format('Y-m-d'); // 2024-02-29 (ano bissexto)

// add e sub com DateInterval$date->add(new DateInterval('P10D')); // +10 dias$date->sub(new DateInterval('P1M')); // -1 mêsecho $date->format('Y-m-d'); // 2024-03-10?>


A principal vantagem do DateTime é a imutabilidade ao usar DateTimeImmutable. Se você não quiser modificar o objeto original, use a versão imutável:

<?php$date = new DateTimeImmutable('2024-01-15');$newDate = $date->modify('+1 month');echo $date->format('Y-m-d'); // 2024-01-15 (data original não foi alterada)echo $newDate->format('Y-m-d'); // 2024-02-15?>


2. Fusos horários: globalizando sua aplicação



Ignorar os fusos horários é um dos erros mais comuns. Se sua aplicação trabalha com usuários de diferentes fusos horários, o tratamento correto dos fusos horários torna-se criticamente importante.



Definição e alteração de fuso horário:

<?php// Criando um objeto com um fuso horário específico$tokyo = new DateTime('now', new DateTimeZone('Asia/Tokyo'));echo $tokyo->format('Y-m-d H:i:s'); // Horário em Tóquio

// Alterando o fuso horário de um objeto existente$london = new DateTime('now', new DateTimeZone('Europe/London'));$london->setTimezone(new DateTimeZone('America/New_York'));echo $london->format('Y-m-d H:i:s T'); // Horário em Nova York com abreviação do fuso?>


Lista de fusos horários disponíveis:

<?php$timezones = DateTimeZone::listIdentifiers();// Você pode filtrar por região, por exemplo:$europe = DateTimeZone::listIdentifiers(DateTimeZone::EUROPE);print_r($europe);?>


Dica prática: Sempre armazene as datas no banco de dados em UTC e converta-as para o fuso horário local apenas ao exibi-las ao usuário. Isso evitará dores de cabeça com as mudanças de horário de verão/inverno.



<?php// Salvando em UTC$utcDate = new DateTime('now', new DateTimeZone('UTC'));$dbDate = $utcDate->format('Y-m-d H:i:s'); // Salva no BD

// Exibindo ao usuário$userDate = new DateTime($dbDate, new DateTimeZone('UTC'));$userDate->setTimezone(new DateTimeZone('America/Los_Angeles'));echo $userDate->format('Y-m-d H:i:s');?>


3. Manipulações com períodos e intervalos: DateInterval e DatePeriod<

Blogs

Book Recommendations