Ćwiczenia PHP – data i czas

Interaktywne przykłady do pracy z timestampem, funkcją date() oraz klasą DateTime w typowych zadaniach webowych.

Co przećwiczysz na tej stronie?

  • odczyt bieżącej daty i godziny, timestamp Unix;
  • formatowanie daty kodami Y, m, d, H, i, s;
  • różnice między datami, dodawanie dni, miesięcy, lat;
  • daty w formacie do bazy danych (MySQL);
  • pomiar czasu wykonania skryptu.
Poziom: 1 – 3 technikum
Temat: data i czas w PHP
Przydatne w: logowanie, rejestracja, kalendarze
Najpierw spróbuj samodzielnie, dopiero potem odsłoń przykładowy kod.

1. Podstawy – timestamp i funkcja date()

1.1. Aktualny timestamp + czytelna data
łatwe
logi, sesje 💾 zapis do bazy

Napisz skrypt, który wyświetli aktualny timestamp oraz tę samą datę w formacie Y-m-d H:i:s.

  • Wykorzystaj funkcję time().
  • Użyj funkcji date() do sformatowania daty.
<?php
echo "Aktualny czas Unix: " . time() . "<br>";

echo "Czytelna data: " . date("Y-m-d H:i:s");
?>
                    
1.2. Twoje urodziny – jaki to dzień?
łatwe
🎂 wydarzenia 📅 planowanie

Utwórz timestamp dla swoich najbliższych urodzin i wypisz, jaki to będzie dzień tygodnia.

<?php
$rok  = 2026;   // zmień na odpowiedni rok
$mies = 5;      // miesiąc Twoich urodzin
$dzien = 10;    // dzień Twoich urodzin

$ts = mktime(0, 0, 0, $mies, $dzien, $rok);

echo "Timestamp urodzin: $ts<br>";
echo "Dzień tygodnia: " . date("l", $ts);
?>
                    
1.3. Precyzyjny czas z microtime()
średnie
🔍 diagnostyka pomiar czasu

Wyświetl dokładny czas w sekundach z częścią ułamkową przy użyciu funkcji microtime(true).

<?php
echo "Dokładny czas (float): " . microtime(true);
?>
                    

2. Praca z bieżącą datą

2.1. Komunikat zależny od dnia tygodnia
łatwe
📆 komunikaty na stronie

Wyświetl powitanie zależnie od dnia tygodnia (inny tekst w poniedziałek, inny w piątek).

<?php
$dzien = date("N"); // 1–7 (pon–niedz)
$nazwadnia = date("l");

echo "Dziś jest: $nazwadnia<br>";

if ($dzien == 1) {
    echo "Początek tygodnia – czas na nowy kod!";
} elseif ($dzien == 5) {
    echo "Piątek – kończymy zadania przed weekendem.";
} else {
    echo "Zwykły dzień „roboczy”.";
}
?>
                    
2.2. Format daty do MySQL
łatwe
🗄 baza danych

Wyświetl bieżącą datę i godzinę w formacie YYYY-MM-DD HH:MM:SS, przydatnym w MySQL.

<?php
$teraz = date("Y-m-d H:i:s");
echo "Format MySQL: " . $teraz;

// przykład użycia w zapytaniu:
// INSERT INTO logi (data_logu, opis) VALUES ('$teraz', 'Logowanie użytkownika');
?>
                    

3. Klasa DateTime – różnice, modyfikacje

3.1. Ile dni do końca roku szkolnego?
średnie
🎓 szkolne zastosowania

Oblicz liczbę dni do końca roku szkolnego (np. 2026‑06‑21) przy użyciu klasy DateTime.

<?php
$dzis = new DateTime();              // dziś
$koniec = new DateTime("2026-06-21");// przykładowy koniec roku szkolnego

$interval = $dzis->diff($koniec);

echo "Do końca roku szkolnego zostało: " . $interval->days . " dni.";
?>
                    
3.2. Czy termin już minął?
średnie
terminy zapisów

Sprawdź, czy podany termin (np. 2026‑03‑15) już minął, czy dopiero nastąpi.

<?php
$dzis = new DateTime();
$termin = new DateTime("2026-03-15");

if ($dzis > $termin) {
    echo "Termin już minął.";
} else {
    echo "Termin jeszcze nie minął.";
}
?>
                    
3.3. Ważność konta – +30 dni
średnie
👤 system logowania

Załóż, że konto użytkownika jest ważne 30 dni od rejestracji. Oblicz datę wygaśnięcia.

<?php
$rejestracja = new DateTime("2026-02-01");
echo "Data rejestracji: " . $rejestracja->format("Y-m-d") . "<br>";

$waznosc = clone $rejestracja;
$waznosc->modify("+30 days");

echo "Konto ważne do: " . $waznosc->format("Y-m-d");
?>
                    
3.4. Pierwszy dzień miesiąca – jaki to dzień?
średnie
📆 kalendarz

Sprawdź, jaki dzień tygodnia przypada na pierwszy dzień bieżącego miesiąca.

<?php
echo "Pierwszy dzień bieżącego miesiąca: "
    . date("l", strtotime("first day of this month"));
?>
                    

4. Pomiar czasu działania skryptu

4.1. Sortowanie dużej tablicy
średnie
wydajność

Zmierzenie czasu działania przy sortowaniu dużej tablicy liczb.

<?php
$start = microtime(true);

$tab = [];
for ($i = 0; $i < 100000; $i++) {
    $tab[] = rand(1, 1000000);
}
sort($tab);

$end = microtime(true);
echo "Czas wykonania: " . ($end - $start) . " sekund";
?>
                    

5. Dodatkowe zadania praktyczne

5.1. Wiek konta użytkownika
średnie
👤 panel użytkownika

Załóż, że użytkownik zarejestrował się 2024‑09‑01. Oblicz, ile dni ma jego konto.

<?php
$rejestracja = new DateTime("2024-09-01");
$dzis = new DateTime();

$roznica = $rejestracja->diff($dzis);

echo "Twoje konto ma " . $roznica->days . " dni.";
?>
                    
5.2. Mini‑kalendarz miesiąca
trudniejsze
📆 generowanie dat

Wypisz wszystkie dni bieżącego miesiąca wraz z nazwą dnia tygodnia.

<?php
$start = new DateTime("first day of this month");
$koniec = new DateTime("last day of this month");

$okres = new DatePeriod(
    $start,
    new DateInterval("P1D"),
    (clone $koniec)->modify("+1 day")
);

foreach ($okres as $dzien) {
    echo $dzien->format("Y-m-d (l)") . "<br>";
}
?>
                    
5.3. Różne strefy czasowe – Warszawa i Tokio
średnie
🌍 aplikacje globalne

Wyświetl bieżącą datę i godzinę dla strefy Europe/Warsaw oraz Asia/Tokyo.

<?php
$warszawa = new DateTime("now", new DateTimeZone("Europe/Warsaw"));
$tokio    = new DateTime("now", new DateTimeZone("Asia/Tokyo"));

echo "Warszawa: " . $warszawa->format("Y-m-d H:i:s") . "<br>";
echo "Tokio: "    . $tokio->format("Y-m-d H:i:s");
?>
                    

Szybka ściąga – formaty daty

Kod Znaczenie Przykład
Yrok (4 cyfry)2026
mmiesiąc z zerem02
ddzień z zerem13
Hgodzina 00–2311
iminuty31
ssekundy07
lpełna nazwa dnia tygodnia (ang.)Friday

Pełna lista kodów w dokumentacji funkcji date() oraz klasy DateTime.

6. Mini‑quiz (teoria)

Odpowiedz ustnie lub na kartce, potem sprawdź w dokumentacji lub na tej stronie:

  1. Jaka jest różnica między funkcją time() a obiektem DateTime?
  2. Jakim kodem formatu wyświetlisz pełną nazwę dnia tygodnia po angielsku?
  3. W jakim formacie najczęściej zapisujemy datę i godzinę w MySQL?
  4. Co zwraca metoda $date1->diff($date2)?
  5. Jak ustawić strefę czasową na Europe/Warsaw w PHP?
📚 Podpowiedź: funkcje date(), date_default_timezone_set() oraz klasa DateTime.