Tworzenie daty względnej do aktualnej (np. 'za 2 dni')
W PHP niejako standardowym sposobem przechowywania informacji o
dacie jest wspomniany wcześniej format timestamp. Modyfikacje
takiego zapisu przeprowadza się przez dodanie lub odjęcie
odpowiedniej liczby sekund. Na przykład, aby stworzyć datę o
godzinę w przód od aktualnej, wystarczy dodać do niej 3600 sekund,
czyli tyle, ile jest w sekund w godzinie.
Przykład 12.7. Tworzenie daty o godzinę w przód
<?php $czas_akt = time(); $za_godz = $czas_akt + 3600; echo date("r", $za_godz); // Wyświetli datę 'za godzinę' ?>
|
Podobnie sprawa wygląda z dodawaniem dni czy tygodni. Gorzej jest w
przypadku miesięcy - przecież nie wiadomo z góry ile sekund ma
miesiąc. Problem ten można rozwiązać na kilka sposobów. Można
rozbić datę na poszczególne części (dzień, miesiąc, rok), dodać
jedynkę do miesiąca, sprawdzić, czy przypadkiem nie wyszedł nam
miesiąc trzynasty (co się stanie jeśli dodamy miesiąc do grudnia) i
w takim przypadku odpowiednio zareagować.
Przykład 12.8. Data "za miesiąc"
<?php $day = date('d'); // dzień $month = date('m'); // miesiąc $year = date('Y'); // rok // dodanie jedynki do miesiąca $month++; // sprawdzenie czy licznik się nie przekręcił if ($month == 13) { $month = 1; $year++; } ?>
|
Jest jednak prostrza metoda tworzenia daty względnej. Można do tego
użyć funkcji strtotime(). Jako jej argument
można podać względny czas.
Przykład 12.9. Tworzenie względnej daty za pomocą funkcji strtotime
echo strtotime("now"), "\n";
// teraz
echo strtotime("+1 day"), "\n";
// jutro
echo strtotime("+1 week"), "\n";
// za tydzień
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
// za tydzień, dwa dni, 4 godziny i 2 sekundy
echo strtotime("next Thursday"), "\n";
// następny czwartek
echo strtotime("last Monday"), "\n";
// poprzedni poniedziałek
|