Działania na datach za pomocą DateInterval
Dodawaj i odejmuj okresy za pomocą DateInterval i modify()
Działania na datach za pomocą DateInterval to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Przegląd DateInterval
DateInterval reprezentuje czas trwania — dni, miesiące, godziny itd. Jest obiektowym sposobem PHP na dodawanie czasu do obiektów DateTime lub odejmowanie go od nich.
Tworzenie DateInterval
Utwórz obiekt DateInterval, używając notacji czasu trwania 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() i sub()
Dodaj obiekt DateInterval do obiektu DateTime lub odejmij go od niego:
<?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() między dwiema datami
diff() zwraca obiekt DateInterval reprezentujący różnicę między dwiema datami:
<?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: 166Różnice w czytelnym formacie
Sformatuj obiekt DateInterval do wyświetlenia:
<?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()
Utwórz obiekt DateInterval na podstawie ciągu znaków opisującego czas w języku naturalnym:
<?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 — iteracja po zakresach
DatePeriod umożliwia iterowanie po zakresie dat w regularnych odstępach:
<?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-05Używanie DatePeriod do raportów tygodniowych
Wygeneruj cotygodniowe punkty kontrolne dat:
<?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;
}Porównywanie interwałów
Porównaj długość dwóch obiektów DateInterval, przeliczając je na łączną liczbę dni:
<?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 shorterObliczanie dni roboczych
Oblicz liczbę dni roboczych między dwiema datami:
<?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';Wzorzec daty wygaśnięcia
Typowy wzorzec wygaśnięcia subskrypcji lub tokenu z użyciem 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 expirySzybkie sprawdzenie
Co zwraca wyrażenie $dateA->diff($dateB)->days?
Podsumowanie: DateInterval
Najważniejsze informacje:
new DateInterval('P1Y2M3DT4H')— czas trwania w formacie ISO 8601add()/sub()służą do modyfikowania obiektu DateTimediff()zwraca obiekt DateInterval między dwiema datamiDatePeriodumożliwia iterowanie po zakresie dat- Używaj
->days, aby uzyskać łączną liczbę dni z diff() - Sprawdzaj
->invert, aby określić, czy interwał jest ujemny
Często zadawane pytania
Czy lekcja „Działania na datach za pomocą DateInterval” jest bezpłatna?
Tak — pełny tekst „Działania na datach za pomocą DateInterval” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Działania na datach za pomocą DateInterval”?
Dodawaj i odejmuj okresy za pomocą DateInterval i modify() Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Działania na datach za pomocą DateInterval”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Znaczniki czasu Unix i date()
- Klasa DateTime
- Działania na datach za pomocą DateInterval
- Strefy czasowe w PHP