0Pricing
PHP Academy · Aula

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;    // 10

add() 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-01

diff() 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: 166

Diferenç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-05

Usando 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 shorter

Cá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 expiry

Verificação rápida

O que $dateA->diff($dateB)->days retorna?

Recapitulação: DateInterval

Pontos principais:

  • new DateInterval('P1Y2M3DT4H') — duração ISO 8601
  • add()/sub() para modificar DateTime
  • diff() retorna um DateInterval entre duas datas
  • DatePeriod itera sobre um intervalo de datas
  • Use ->days para obter o total de dias a partir de diff()
  • Verifique ->invert para 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

  1. Marcas de tempo Unix e date()
  2. A classe DateTime
  3. Aritmética de datas com DateInterval
  4. Fusos horários em PHP
← Voltar para PHP Academy