PHP: Zeitzone einstellen (locale) u. Datum formatieren

edit | delete

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...


link Beispiele => php.net

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);
}