Aritmética de datas com DateInterval
Adicione e subtraia períodos usando DateInterval e modify().
Aritmética de datas com DateInterval é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 3 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.
Visão geral de DateInterval
DateInterval representa uma duração de tempo — dias, meses, horas etc. É a forma de OO do PHP para adicionar ou subtrair tempo de objetos DateTime.
Criação de DateInterval
Crie um DateInterval usando a notação de duração ISO 8601:
<?php
// P = period, T = time separator
$oneYear = new DateInterval('P1Y'); // 1 year
$sixMonths = new DateInterval('P6M'); // 6 months
$tenDays = new DateInterval('P10D'); // 10 days
$twoHours = new DateInterval('PT2H'); // 2 hours (T before time)
$complex = new DateInterval('P1Y2M3DT4H5M6S');
echo $oneYear->y; // 1
echo $tenDays->d; // 10add() e sub()
Adicione ou subtraia um DateInterval de um DateTime:
<?php
$dt = new DateTime('2024-01-01');
$dt->add(new DateInterval('P1Y')); // +1 year
echo $dt->format('Y-m-d'); // 2025-01-01
$dt->sub(new DateInterval('P3M')); // -3 months
echo $dt->format('Y-m-d'); // 2024-10-01diff() entre duas datas
diff() retorna um DateInterval que representa a diferença entre duas datas:
<?php
$start = new DateTime('2024-01-01');
$end = new DateTime('2024-06-15');
$diff = $start->diff($end);
echo $diff->y; // years
echo $diff->m; // months
echo $diff->d; // days
echo $diff->h; // hours
echo $diff->days; // total days: 166Diferenças em formato legível
Formate um DateInterval para exibição:
<?php
$birthdate = new DateTime('1990-05-15');
$today = new DateTime();
$age = $birthdate->diff($today);
echo $age->y . ' years, ' . $age->m . ' months, ' . $age->d . ' days';
// Check if date is in the past
if ($diff->invert === 1) {
echo 'Date was in the past';
}DateInterval::createFromDateString()
Crie um DateInterval a partir de uma string em linguagem natural:
<?php
$interval = DateInterval::createFromDateString('1 year 2 months 3 days');
$dt = new DateTime('2024-01-01');
$dt->add($interval);
echo $dt->format('Y-m-d'); // 2025-03-04
// Other examples:
DateInterval::createFromDateString('next monday');
DateInterval::createFromDateString('6 weeks');DatePeriod — iterar sobre intervalos
DatePeriod permite iterar sobre um intervalo de datas em intervalos regulares:
<?php
$start = new DateTime('2024-01-01');
$interval = new DateInterval('P1M'); // monthly
$end = new DateTime('2024-06-01');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('Y-m') . PHP_EOL;
}
// 2024-01, 2024-02, 2024-03, 2024-04, 2024-05Usando DatePeriod para relatórios semanais
Gere pontos de verificação semanais de datas:
<?php
$start = new DateTime('2024-01-01');
$interval = new DateInterval('P7D'); // weekly
$end = new DateTime('2024-02-01');
$weeks = new DatePeriod($start, $interval, $end);
foreach ($weeks as $week) {
echo 'Week of: ' . $week->format('Y-m-d') . PHP_EOL;
}Comparação de intervalos
Compare a magnitude de dois DateIntervals convertendo-os para o total de dias:
<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-06-01');
$c = new DateTime('2025-01-01');
$diff1 = $a->diff($b)->days; // 152
$diff2 = $a->diff($c)->days; // 366
echo ($diff1 < $diff2) ? 'First interval shorter' : 'First interval longer';
// First interval shorterCálculo de dias úteis
Calcule o número de dias úteis entre duas datas:
<?php
function businessDays(DateTime $from, DateTime $to): int {
$count = 0;
$cur = clone $from;
while ($cur < $to) {
$dow = (int) $cur->format('N'); // 1=Mon ... 7=Sun
if ($dow < 6) $count++;
$cur->modify('+1 day');
}
return $count;
}
$from = new DateTime('2024-05-27');
$to = new DateTime('2024-06-07');
echo businessDays($from, $to) . ' business days';Padrão de data de expiração
Padrão comum de expiração de assinaturas ou tokens usando DateInterval:
<?php
function expiresAt(string $duration = 'P30D'): string {
$dt = new DateTimeImmutable();
return $dt->add(new DateInterval($duration))->format('Y-m-d H:i:s');
}
echo expiresAt('P30D'); // 30-day trial expiry
echo expiresAt('P1Y'); // 1-year subscription expiry
echo expiresAt('PT1H'); // 1-hour token expiryVerificação rápida
O que $dateA->diff($dateB)->days retorna?
Recapitulação: DateInterval
Pontos principais:
new DateInterval('P1Y2M3DT4H')— duração ISO 8601add()/sub()para modificar DateTimediff()retorna um DateInterval entre duas datasDatePerioditera sobre um intervalo de datas- Use
->dayspara obter o total de dias a partir de diff() - Verifique
->invertpara saber se o intervalo é negativo
Perguntas Frequentes
A aula “Aritmética de datas com DateInterval” é grátis?
Sim — o texto completo de “Aritmética de datas com DateInterval” é 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 “Aritmética de datas com DateInterval”?
Adicione e subtraia períodos usando DateInterval e modify(). 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 3 de 4.
Quanto tempo leva a aula “Aritmética de datas com DateInterval”?
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