A classe DateTime
Crie e manipule datas com a API orientada a objetos DateTime.
A classe DateTime é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
DateTime versus funções procedurais de data
O PHP tem funções procedurais (date(), strtotime()) e uma API OO de DateTime. A abordagem OO é preferida para operações complexas:
DateTime— objeto mutável de data e horaDateTimeImmutable— imutável (mais seguro no código moderno)
Criando objetos DateTime
Crie objetos DateTime a partir de várias entradas:
<?php
$now = new DateTime(); // current time
$specific = new DateTime('2024-12-25 14:30:00'); // from string
$fromTs = new DateTime('@' . time()); // from Unix timestamp
echo $now->format('Y-m-d H:i:s');
echo $specific->format('D, d M Y');
// DateTimeImmutable is safer:
$dt = new DateTimeImmutable('2024-01-01');Formatando com format()
Formate um DateTime usando os mesmos caracteres de formatação de date():
<?php
$dt = new DateTime('2024-05-27 14:30:00');
echo $dt->format('Y-m-d'); // 2024-05-27
echo $dt->format('H:i:s'); // 14:30:00
echo $dt->format('D d M Y, H:i'); // Mon 27 May 2024, 14:30
echo $dt->format('U'); // Unix timestamp
echo $dt->format(DateTime::ATOM); // ISO 8601modify()
Modifique um DateTime com uma expressão relativa:
<?php
$dt = new DateTime('2024-01-15');
$dt->modify('+1 month');
echo $dt->format('Y-m-d'); // 2024-02-15
$dt->modify('next Friday');
echo $dt->format('Y-m-d');
// DateTimeImmutable creates new object:
$dt2 = new DateTimeImmutable('2024-01-15');
$dt3 = $dt2->modify('+1 year'); // $dt2 unchangedcreateFromFormat()
Interprete um texto de data com um formato específico:
<?php
// Parse European date format
$dt = DateTime::createFromFormat('d/m/Y', '25/12/2024');
echo $dt->format('Y-m-d'); // 2024-12-25
// Parse with time
$dt2 = DateTime::createFromFormat('d.m.Y H:i', '27.05.2024 14:30');
echo $dt2->format('c'); // ISO 8601
// Returns false on failure:
$bad = DateTime::createFromFormat('Y-m-d', 'not-a-date');
var_dump($bad); // bool(false)Comparando objetos DateTime
Compare objetos DateTime com operadores de comparação:
<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-12-31');
var_dump($a < $b); // true
var_dump($a == $b); // false
var_dump($a > $b); // false
// Sort an array of DateTime:
$dates = [new DateTime('2024-06-01'), new DateTime('2024-01-01')];
usort($dates, fn($a, $b) => $a <=> $b);
echo $dates[0]->format('Y-m-d'); // 2024-01-01getTimestamp()
Converta um DateTime em uma marca de tempo Unix:
<?php
$dt = new DateTime('2024-12-25');
$ts = $dt->getTimestamp();
echo $ts; // Unix timestamp for Dec 25 2024
// setTimestamp()
$dt2 = new DateTime();
$dt2->setTimestamp($ts);
echo $dt2->format('Y-m-d'); // 2024-12-25Definindo componentes de data e hora
Modifique componentes individuais de um DateTime:
<?php
$dt = new DateTime();
$dt->setDate(2024, 12, 25);
$dt->setTime(23, 59, 59);
echo $dt->format('Y-m-d H:i:s');
// 2024-12-25 23:59:59
// Or chain with DateTimeImmutable:
$dt = (new DateTimeImmutable())
->setDate(2024, 12, 25)
->setTime(0, 0, 0);DateTime na prática: verificando uma assinatura
Uso no mundo real: verifique se uma assinatura ainda está ativa:
<?php
function isSubscriptionActive(string $expiresAt): bool {
$expiry = new DateTimeImmutable($expiresAt);
$now = new DateTimeImmutable();
return $expiry > $now;
}
var_dump(isSubscriptionActive('2025-12-31')); // true
var_dump(isSubscriptionActive('2020-01-01')); // falseBiblioteca Carbon
Carbon é uma biblioteca popular do PHP que estende DateTime com uma API fluente:
<?php
// After: composer require nesbot/carbon
use Carbon\Carbon;
$now = Carbon::now();
$then = Carbon::parse('2024-01-01');
echo $now->diffForHumans($then); // '5 months after'
echo $now->addWeek()->format('Y-m-d');
echo Carbon::tomorrow()->isWeekday() ? 'weekday' : 'weekend';
// Locale-aware:
Carbon::setLocale('tr');
echo $now->diffForHumans($then); // TurkishISO 8601 e DateTime::ATOM
Use o formato ISO 8601 para APIs e bancos de dados:
<?php
$dt = new DateTime();
// ISO 8601
echo $dt->format('c'); // 2024-05-27T14:30:00+03:00
echo $dt->format(DateTime::ATOM); // same
echo $dt->format(DateTime::RFC3339); // same family
// For JSON APIs:
$json = json_encode([
'created_at' => $dt->format(DateTime::ATOM)
]);
echo $json;Verificação rápida
Qual é a principal diferença entre DateTime e DateTimeImmutable?
Recapitulação: a classe DateTime
Essenciais de DateTime OO:
new DateTime('date string')para criarformat()para a saídamodify()para alterações relativascreateFromFormat()para interpretar formatos personalizados- Prefira
DateTimeImmutablepara evitar erros de mutação - Use ISO 8601 (
DateTime::ATOM) para APIs
Perguntas Frequentes
A aula “A classe DateTime” é grátis?
Sim — o texto completo de “A classe DateTime” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “A classe DateTime”?
Crie e manipule datas com a API orientada a objetos DateTime. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “A classe DateTime”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Marcas de tempo Unix e date()
- A classe DateTime
- Aritmética de datas com DateInterval
- Fusos horários em PHP