Przejdź do głównej zawartości

Licznik dni do wydarzenia

Stworzysz Licznik dni do wydarzenia - aplikację webową do zarządzania ważnymi datami i wydarzeniami. Użytkownik dodaje wydarzenia (np. egzamin, urodziny, wakacje), a system automatycznie oblicza ile dni pozostało do każdego z nich. Aplikacja pomaga w planowaniu i przypomina o zbliżających się terminach.

Czego się nauczysz?

  • Pracy z datami i czasem w PHP (DateTime)
  • Obliczania różnicy między datami
  • Sortowania wydarzeń chronologicznie
  • Tworzenia alertów i powiadomień

W prawdziwej pracy...

Zarządzanie terminami i kalendarzami to fundament aplikacji produktywnościowych - od prostych przypomnień po zaawansowane systemy CRM i project management. Umiejętność pracy z datami jest niezbędna w każdym projekcie webowym.

  1. Dodawanie wydarzenia Użytkownik wprowadza nazwę wydarzenia i datę. Aplikacja waliduje dane (data nie może być z przeszłości dla nowych wydarzeń).

  2. Obliczanie dni System automatycznie oblicza ile dni pozostało do każdego wydarzenia i wyświetla tę informację przy każdym wpisie.

  3. Lista wydarzeń Wszystkie wydarzenia są wyświetlane na liście, posortowane od najbliższego do najdalszego.

Przykładowa struktura pliku JSON:

{
"events": [
{
"id": 1,
"name": "Egzamin INF.03",
"date": "2026-06-15",
"category": "nauka",
"created_at": "2026-02-13 10:30:00"
},
{
"id": 2,
"name": "Wakacje",
"date": "2026-06-28",
"category": "osobiste",
"created_at": "2026-02-13 10:35:00"
},
{
"id": 3,
"name": "Urodziny mamy",
"date": "2026-03-20",
"category": "rodzina",
"created_at": "2026-02-13 10:40:00"
}
]
}

Wymagane funkcje:

  • Formularz: nazwa wydarzenia, data
  • Walidacja w PHP (niepuste pola, poprawna data)
  • Obliczenie i wyświetlenie dni do wydarzenia
  • Zapis wydarzeń do pliku JSON
  • Lista wydarzeń z liczbą dni

Przykładowy scenariusz:

Uczeń dodaje wydarzenie “Egzamin INF.03” z datą 15.06.2026. Na liście widzi: “Egzamin INF.03 - za 122 dni”. Dodaje kolejne wydarzenie i widzi obie pozycje.

Ocena: 3.0

Obliczanie dni do wydarzenia:

<?php
$eventDate = new DateTime('2026-06-15');
$today = new DateTime('today');
$diff = $today->diff($eventDate);
$days = (int)$diff->format('%r%a'); // %r daje znak + lub -
if ($days > 0) {
echo "Za $days dni";
} elseif ($days < 0) {
echo "Minęło " . abs($days) . " dni temu";
} else {
echo "Dzisiaj!";
}
?>

Walidacja daty:

<?php
$date = $_POST['date'] ?? '';
$eventDate = DateTime::createFromFormat('Y-m-d', $date);
if (!$eventDate) {
$errors[] = 'Nieprawidłowy format daty';
} elseif ($eventDate < new DateTime('today')) {
$errors[] = 'Data nie może być z przeszłości';
}
?>

Sortowanie po dacie (najbliższe najpierw):

<?php
$events = json_decode(file_get_contents('events.json'), true)['events'];
usort($events, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
?>

Kolorowanie według pilności:

<?php
function getUrgencyClass($days) {
if ($days < 0) return 'past'; // szary
if ($days <= 7) return 'urgent'; // czerwony
if ($days <= 30) return 'soon'; // żółty
return 'normal'; // zielony
}
?>
<style>
.past { color: #888; text-decoration: line-through; }
.urgent { color: #dc3545; font-weight: bold; }
.soon { color: #ffc107; }
.normal { color: #28a745; }
</style>

Wykorzystaj lekcje!

Cotygodniowe spotkania podczas lekcji to idealny moment, by:

  • Pokazać postępy - nawet małe kroki się liczą
  • Wyjaśnić wątpliwości - pytaj, nie zgaduj
  • Skonsultować rozwiązania - feedback pomoże Ci się rozwijać

Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!