Jak wyświetlić datę w słownym, polskim zapisie?

Wolverine

Prosty skrypt, który tłumaczy timestamp (jako parametr) na polską datę.

function toLocaleDateString($time)
{
    return strtr(date("l, d F Y, G:i:s", $time), [
        'Monday' => 'Poniedziałek',
        'Tuesday' => 'Wtorek',
        'Wednesday' => 'Środa',
        'Thursday' => 'Czwartek',
        'Friday' => 'Piątek',
        'Saturday' => 'Sobota',
        'Sunday' => 'Niedziela',
        'January' => 'Stycznia',
        'February' => 'Lutego',
        'March' => 'Marca',
        'April' => 'Kwietnia',
        'May' => 'Maja',
        'June' => 'Czerwca',
        'July' => 'Lipca',
        'August' => 'Sierpnia',
        'September' => 'Września',
        'October' => 'Października',
        'November' => 'Listopada',
        'December' => 'Grudnia',
    ]);
}

Użycie:

echo toLocaleDateString(time());

Alternatywna implementacja

function toLocaleDateString($s) {
    if (date("l, d F Y", $s) == date("l, d F Y", time())) {
        $date = 'Dzisiaj' . date(", d F Y, G:i:s", $s);
    } else {
        $date = date("l, d F Y, G:i:s", $s);
    }
    
    $date = str_replace('Monday', 'Poniedziałek', $date);
    $date = str_replace('Tuesday', 'Wtorek', $date);
    $date = str_replace('Wednesday', 'Środa', $date);
    $date = str_replace('Thursday', 'Czwartek', $date);
    $date = str_replace('Friday', 'Piątek', $date);
    $date = str_replace('Saturday', 'Sobota', $date);
    $date = str_replace('Sunday', 'Niedziela', $date);
    
    $date = str_replace('January', 'Stycznia', $date);
    $date = str_replace('February', 'Lutego', $date);
    $date = str_replace('March', 'Marca', $date);
    $date = str_replace('April', 'Kwietnia', $date);
    $date = str_replace('May', 'Maja', $date);
    $date = str_replace('June', 'Czerwca', $date);
    $date = str_replace('July', 'Lipca', $date);
    $date = str_replace('August', 'Sierpnia', $date);
    $date = str_replace('September', 'Września', $date);
    $date = str_replace('October', 'Października', $date);
    $date = str_replace('November', 'Listopada', $date);
    $date = str_replace('December', 'Grudnia', $date);

    return $date;
}
FAQ

7 komentarzy

A nie lepiej format daty podawać jako drugi parametr funkcji? Z doświadczenia wiem że tak jest praktyczniej.

Najprościej chyba ustawić locales, w zależności od języka?

A co jeśli ktoś będzie chciał krótką nazwę dnia/miesiąca? W kojocie jest rozwiązanie działające na krótkich i długich nazwach dni/miesięcy.

function MakeDate($s)
{
$date = date("l, d F Y, Gs", $s);

$date_ang = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Monday', 'Saturday', 'Sunday', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

$date_pl = array('Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela', 'Stycznia', 'Lutego', 'Marca', 'Kwietnia', 'Maja', 'Czerwca', 'Lipca', 'Sierpnia', 'Września', 'Października', 'Listopada', 'Grudnia');

return str_replace($date_ang, $date_pl, $date);
}

powinno działać...

Dlaczego to jest w FAQ delphi ?

Zamiast tyle razy używać str_replace można byłoby skorzystać z tablicy:

$DniAngielskie = array("Monday", "Tuesday", "Wednesday", "Thursday", "Monday", "Saturday", "Sunday");
$DniPolskie = array("Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela");
$date = str_replace($DniAngielskie, $DniPolskie, $date);

To samo z miesiącami. O wiele szybsze i prostsze :)

A jeszcze prościej można to zrobić w sposób następujący:

$dzien = array('niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota');

$miesiac = array('', 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');

echo 'Dzisiaj jest ' . $dzien[date('w')] . date(', j ') . $miesiac[date('n')] . date(' Y ') . 'roku.';