Datoaritmetik med DateInterval
Læg tidsperioder til, og træk dem fra med DateInterval og modify().
Datoaritmetik med DateInterval er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.
Oversigt over DateInterval
DateInterval repræsenterer en tidsvarighed — dage, måneder, timer osv. Det er PHP's objektorienterede måde at lægge tid til eller trække tid fra DateTime-objekter på.
Oprettelse af DateInterval
Opret en DateInterval ved hjælp af ISO 8601-notation for varigheder:
<?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() og sub()
Læg en DateInterval til en DateTime, eller træk den fra:
<?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() mellem to datoer
diff() returnerer en DateInterval, der repræsenterer forskellen mellem to datoer:
<?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: 166Forskelle i læsevenligt format
Formatér en DateInterval til visning:
<?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()
Opret en DateInterval ud fra en streng i naturligt sprog:
<?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 — gennemløb af datointervaller
DatePeriod lader dig gennemløbe et datointerval med regelmæssige intervaller:
<?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-05Brug af DatePeriod til ugentlige rapporter
Generér ugentlige datokontrolpunkter:
<?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;
}Sammenligning af intervaller
Sammenlign størrelsen af to DateIntervals ved at konvertere dem til et samlet antal dage:
<?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 shorterBeregning af arbejdsdage
Beregn antallet af arbejdsdage mellem to datoer:
<?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';Mønster for udløbsdato
Et almindeligt mønster til udløb af abonnementer eller tokens ved hjælp af 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 expiryHurtigt tjek
Hvad returnerer $dateA->diff($dateB)->days?
Opsummering: DateInterval
Vigtige punkter:
new DateInterval('P1Y2M3DT4H')— varighed i ISO 8601-formatadd()/sub()til at ændre DateTimediff()returnerer en DateInterval mellem to datoerDatePeriodgennemløber et datointerval- Brug
->daystil at få det samlede antal dage fra diff() - Kontrollér
->invertfor at se, om intervallet er negativt
Lær PHP med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 49
- Lektioner
- 195
Ofte stillede spørgsmål
Er lektionen “Datoaritmetik med DateInterval” gratis?
Ja — hele teksten til “Datoaritmetik med DateInterval” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Datoaritmetik med DateInterval”?
Læg tidsperioder til, og træk dem fra med DateInterval og modify(). Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på PHP Academy?
Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Datoaritmetik med DateInterval”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne PHP Academy-lektion?
Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Unix-tidsstempler og date()
- DateTime-klassen
- Datoaritmetik med DateInterval
- Tidszoner i PHP