Data i czas po polsku („12 lipca 2026", „5 minut temu")
- Przydatne narzędzia
- poziom: początkujący
- aktualizacja: 12 lipca 2026
PHP z pudełka wyświetli datę po angielsku, a naiwne tłumaczenie kończy się „12 lipiec 2026" zamiast „12 lipca 2026". Ten skrypt załatwia temat raz na zawsze: poprawne dopełniacze miesięcy, dni tygodnia i relatywny czas w stylu „5 minut temu" z pełną polską odmianą liczebników.
<?php
/**
* Data i czas po polsku — skryptyPHP.com
* Zapisz jako: daty.php i dołączaj przez require 'daty.php';
*/
date_default_timezone_set('Europe/Warsaw');
/**
* Data po polsku: „12 lipca 2026" lub „niedziela, 12 lipca 2026".
*
* @param int|string|null $czas timestamp, tekst daty (np. z bazy) albo null = teraz
*/
function data_po_polsku($czas = null, bool $zDniemTygodnia = false): string
{
$miesiace = [
1 => 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca',
'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia',
];
$dni = [
1 => 'poniedziałek', 'wtorek', 'środa', 'czwartek',
'piątek', 'sobota', 'niedziela',
];
$t = match (true) {
$czas === null => time(),
is_int($czas) => $czas,
default => strtotime($czas) ?: time(),
};
$data = date('j', $t) . ' ' . $miesiace[(int) date('n', $t)] . ' ' . date('Y', $t);
return $zDniemTygodnia
? $dni[(int) date('N', $t)] . ', ' . $data
: $data;
}
/**
* Polska odmiana liczebników: odmien(5, 'minuta', 'minuty', 'minut') -> 'minut'.
*/
function odmien(int $n, string $jeden, string $dwa, string $piec): string
{
if ($n === 1) {
return $jeden;
}
$r10 = $n % 10;
$r100 = $n % 100;
if ($r10 >= 2 && $r10 <= 4 && ($r100 < 12 || $r100 > 14)) {
return $dwa; // 2-4, 22-24, ale nie 12-14
}
return $piec;
}
/**
* Relatywny czas: „przed chwilą", „5 minut temu", „wczoraj"...
*/
function czas_temu($czas): string
{
$t = is_int($czas) ? $czas : (strtotime((string) $czas) ?: time());
$roznica = time() - $t;
if ($roznica < 0) { return data_po_polsku($t); } // data z przyszłości
if ($roznica < 60) { return 'przed chwilą'; }
$minuty = intdiv($roznica, 60);
if ($minuty < 60) {
return $minuty . ' ' . odmien($minuty, 'minutę', 'minuty', 'minut') . ' temu';
}
$godziny = intdiv($minuty, 60);
if ($godziny < 24) {
return $godziny . ' ' . odmien($godziny, 'godzinę', 'godziny', 'godzin') . ' temu';
}
$dni = intdiv($godziny, 24);
if ($dni === 1) { return 'wczoraj'; }
if ($dni === 2) { return 'przedwczoraj'; }
if ($dni < 31) { return $dni . ' ' . odmien($dni, 'dzień', 'dni', 'dni') . ' temu'; }
$miesiace = intdiv($dni, 30);
if ($miesiace < 12) {
return $miesiace . ' ' . odmien($miesiace, 'miesiąc', 'miesiące', 'miesięcy') . ' temu';
}
// Powyżej roku czytelniej pokazać pełną datę
return data_po_polsku($t);
}
// ── PRZYKŁADY ───────────────────────────────────────────────
echo data_po_polsku(); // 12 lipca 2026
echo "\n";
echo data_po_polsku(null, true); // niedziela, 12 lipca 2026
echo "\n";
echo data_po_polsku('2026-05-01'); // 1 maja 2026 (np. data z bazy)
echo "\n";
echo czas_temu(time() - 300); // 5 minut temu
echo "\n";
echo czas_temu(time() - 7200); // 2 godziny temu
echo "\n";
echo czas_temu('2026-07-10 12:00:00'); // przedwczoraj
Jak użyć tego skryptu
- Zapisz funkcje w pliku
daty.phpi dołącz przezrequiretam, gdzie wyświetlasz daty. - Daty z bazy (np. kolumna DATETIME) podawaj bezpośrednio:
czas_temu($wiersz['dodano']). - Funkcja
odmien()przydaje się też poza datami — np. „3 komentarze", „7 plików":$n . ' ' . odmien($n, 'plik', 'pliki', 'plików').
Warto wiedzieć
- Nazwy miesięcy są w dopełniaczu („lipca", nie „lipiec") — dokładnie tak, jak wymaga tego zapis daty po polsku.
- Alternatywą jest klasa
IntlDateFormatterz rozszerzenia intl, ale nie każdy hosting ma je włączone — ten skrypt działa wszędzie. - Strefa czasowa jest ustawiona na
Europe/Warsaw— dzięki temu „5 minut temu" nie rozjedzie się o godzinę przy zmianie czasu letniego. - W przypadku dat w przyszłości
czas_temu()bezpiecznie wraca do pełnej daty zamiast pokazywać ujemne wartości.
Podobne skrypty
Generator bezpiecznych haseł
Generator haseł oparty na kryptograficznym random_int(): wybór długości i zestawów znaków, gwarancja użycia każdego zestawu i opcja pomijania mylących znaków (l, 1, O, 0).
początkujący Zobacz kod → Przydatne narzędziaLicznik odwiedzin bez bazy danych
Klasyczny licznik odwiedzin zapisywany do pliku tekstowego — z blokadą flock() zapobiegającą gubieniu wejść i ciasteczkiem odsiewającym wielokrotne odświeżenia.
początkujący Zobacz kod → Przydatne narzędziaPrzyjazne adresy URL — generowanie slugów
Zamiana dowolnego tytułu na przyjazny adres URL: „Żółta łódź podwodna!" → „zolta-lodz-podwodna". Z pełną mapą polskich znaków i funkcją zapewniania unikalności.
początkujący Zobacz kod →