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;
}
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, G:i:s", $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.';