PHP: Zeitzone einstellen (locale) u. Datum formatieren
Autor: Macky Varsamis Karamanidis, Ralf v.d.Mark
eingetragen: Dienstag, 04. Februar 2020 um 13:47 Uhr (6/2020 Kalenderwoche)
geändert: Mittwoch, 13. April 2022 um 14:15 Uhr (15/2022 Kalenderwoche)
Keywords: locale, Zeitzone, germany, datum, datetime fomat strftime
Kategorien: PHP-ZF, PHP, PHP-Symfony,
Text:
Zeitzone einstellen und Datum entsprechend ausgeben
Datums-Ausgabe von strftime(...):
Monday, 10/25/21 um 16:41 Uhr (43. KW)
Nach umstellen der setLocale() auf Deutsch:
Montag, 25.10.2021 um 16:41 Uhr (43. KW)
Achtung: Nicht mehr verwenden ab PHP 8.1!!!
php.net/manual/de/function.strftime.php.
link Formate => org.github.io...
Quellcode:
//Zeitzone einstellen:
date_default_timezone_set('Europe/Berlin');
//Standard für LC_TIME ist en_US
setlocale(LC_TIME, "de_DE.UTF-8");
//setlocale(LANG, "de_DE");
//setlocale(LANGUAGE, "de_DE");
setlocale(LC_CTYPE, "de_DE");
setlocale(LC_MESSAGES, "de_DE");
//setlocale(LC_PAPER, "de_DE");
setlocale(LC_COLLATE, "de_DE");
setlocale(LC_NUMERIC, "de_DE");
setlocale(LC_ALL, "de_DE.UTF-8");
//var_dump(setlocale (LC_ALL, 0));
//ab PHP-8.1 veraltet: strftime("%A, %x um %R Uhr (%V. KW)", time());
//NEU:
$this->strftimeDE($format, $DateTimeObj);
/**
* Alternative zur Funktion: "strftime()"!
* <p>Hierfür muss in der php.ini die Zeile: extension=intl aktiviert werden!</p>
*
* @param $format
* @param $date
* @return bool|string
*
* @link Formate =>
* https://unicode-org.github.io/icu/userguide/format_parse/datetime/#date-field-symbol-table
* @link Beispiele =>
* https://www.php.net/manual/de/intldateformatter.format.php
*/
function strftimeDE($format, $date): bool|string
{
if($date instanceof \DateTime) $date = $date->getTimestamp();
if(is_string($date)) $date = strtotime($date);
$locale = "de_DE"; //-- oder "de-DE"
$datetype = \IntlDateFormatter::FULL;
$timetype = \IntlDateFormatter::FULL;
$timezone = 'Europe/Berlin';
$calendar = \IntlDateFormatter::GREGORIAN;
$pattern = empty($format) ? "EEEE', ' dd. MMMM yyyy" : $format;
$fmt = new \IntlDateFormatter($locale, $datetype, $timetype, $timezone, $calendar, $pattern);
return $fmt->format($date);
}