TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

Datumsausgabe auf deutsch


Autor Nachricht
Verfasst am: 18. 02. 2011 [14:00]
skriptkiddie
Themenersteller
Dabei seit: 11.01.2011
Beiträge: 92
Hallo Zusammen,

ich gebe mit: <f:format.date format="F Y">@1297897200</f:format.date>
folgendes Datum aus: February 2011

Ich möchte aber das Datum in Deutsch ausgegeben bekommen.

Wie mache ich das am besten:


In PHP würde ich das so machen:
PHP
<?php
date_default_timezone_set('Europe/Berlin'); 
// Set the gloabal LC_TIME constant to german
setlocale(LC_TIME, 'de_DE');
// Little bit other Syntax but better effect
echo "time " . strftime('%A, %d. %B %Y') . "<br>"; //Output: Mittwoch, 07. September 2005
?>
Profil
Verfasst am: 24. 02. 2011 [12:59]
sunixzs
Dabei seit: 18.06.2008
Beiträge: 106
Hallo scriptkiddie,

ich denke da hilft ein eigener ViewHelper in der Extension:

Ordner: Classes/ViewHelpers/Format
Datei: StftimeViewHelper.php
PHP
/**
 * Formats a Timestamp or DateTime-Object in strftime()
 * @api
 */
class Tx_YourCamelCasedExtenionKey_ViewHelpers_Format_StrftimeViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
 
	/**
	 * Render the supplied DateTime object as a formatted date using strftime.
	 *
	 * @param mixed $date either a DateTime object or a string (UNIX-Timestamp)
	 * @param string $format Format String which is taken to format the Date/Time
	 * @return string Formatted date
	 * @api
	 */
	public function render($date = NULL, $format = '%A, %d. %B %Y') {
		if ($date === NULL) {
			$date = $this->renderChildren();
			if ($date === NULL) {
				return '';
			}
		}
		if ($date instanceof DateTime) {
			try {
				return strftime($format, $date->getTimestamp());
			} catch (Exception $exception) {
				throw new Tx_Fluid_Core_ViewHelper_Exception('"' . $date . '" was DateTime and could not be converted to UNIX-Timestamp by DateTime.', 200000001);
			}
		}
		return strftime($format, (int)$date);
	}
}


Im Template den NameSpace deklarieren:
HTML
{namespace tx = Tx_YourCamelCasedExtenionKey_ViewHelpers}


Dann kann man den ViewHelper benutzen:
HTML
<tx:format.strftime date="{MyDateTime}" format="%A, der %d. %B %Y" />
 
<!-- oder: -->
 
<tx:format.strftime format="%A, der %d. %B %Y" />{MyDateTime}</tx:format.strftime>
 
<!-- oder als Timestamp sollte es auch funktionieren: -->
 
<tx:format.strftime format="%B %Y">1297897200</tx:format.strftime>


LG sun

Edith sagt: @ vor dem Timestamp im Beispiel entfernt.

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 24.02.2011 um 13:04.]
Profil
Verfasst am: 26. 07. 2011 [21:22]
merzilla
Dabei seit: 30.06.2006
Beiträge: 15
Hi,

@sunixzs: Wollte mich nur bedanken für den Viewhelper. icon_smile.gif
Hat mir Zeit erspart!

Viele Grüße
merzilla
ProfilICQ
Verfasst am: 27. 07. 2011 [10:18]
Eydamos
Dabei seit: 16.12.2010
Beiträge: 54
Mich würde interessieren ob das jetzt wirklich einen unterschied macht. Eigentlich sollte der ViewHelper von sun das selbe machen wie format.date.

Wie du in deinem Post schon gesagt hast würdest du in PHP date_default_timezone_set machen. Da du das in TYPO3 nicht so einfach machen kannst würde ich dir empfehlen einfach in der .htaccess
HTML
date.timezone = "Europe/Berlin"

zu setzen. Dann werden die Monate und Wochentage auch in Deutsch ausgegeben.
Profil
Verfasst am: 27. 07. 2011 [10:24]
sunixzs
Dabei seit: 18.06.2008
Beiträge: 106
Moin,

kurz noch zwei Anmerkungen.

In der modifizierten Methode von mir benötigt man mindestens PHP 5.3 wegen der DateTime->getTimestamp() Methode.

Die Methode DateTime->format() (im original ViewHelper) benutzt die Syntax wie bei date() - also nicht lokalisiert. Deswegen benutzte ich strftime().

http://www.php.net/manual/de/datetime.format.php
http://www.php.net/manual/de/function.date.php
http://pa.php.net/manual/de/function.strftime.php

Schönen Tag

sun.

Edith sagt: Links eingefügt.

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 27.07.2011 um 10:26.]
Profil
Verfasst am: 27. 07. 2011 [10:51]
Eydamos
Dabei seit: 16.12.2010
Beiträge: 54
Ah danke für den Hinweis, dieser kleine Unterschied war mir bisher garnicht bewusst geworden.
Profil
Verfasst am: 07. 11. 2011 [18:04]
typo3typ
Dabei seit: 14.02.2008
Beiträge: 42
Hi,

ich verwende fast den gleichen ViewHelper:

PHP
public function render($date = NULL, $format = '%Y-%m-%d') {
		if ($date === NULL OR $date == '0') {
			$date = $this->renderChildren();
			if ($date === NULL) {
				return '';
			}
		}
		if (!$date instanceof DateTime) {
			try {
				$date = new DateTime($date);
			} catch (Exception $exception) {
				throw new Tx_Fluid_Core_ViewHelper_Exception('"' . $date . '" could not be parsed by DateTime constructor.', 1241722579);
			}
		}
 
		return strftime($format,$date->format('U'));
 
	}


Wenn ich nun mit

HTML
<xxx:format.date format="%d. %B %Y um %H:%m Uhr">{message.date}</xxx:format.date>


mir das Datum fein formattiert ausgeben will, dann wird irgendwas gerundet.

Denn ich erhalte für unterschiedliche Timestamps immer die gleiche Uhrzeit?

Für den Timestamp 1320682620 : 07. November 2011 um 17:11 Uhr
Für den Timestamp 1320682343 : 07. November 2011 um 17:11 Uhr
Für den Timestamp 1320682024 : 07. November 2011 um 17:11 Uhr

Zum gegenchecken erhalte ich beim "good old" Elmar ( icon_smile.gif )
http://elmar-eigner.de/tstamps.html?zeichen=1320682343&timeformat=1

für den mittleren Timestamp 1320682343 eine ganz andere Uhrzeit - nämlich den 2011-11-07 17:12:23

An der Locale Cfg des Severs kanns nicht liegen, weil mir der Monat ja auch korrekt ausgegeben wird.

Die Variante hab ich auch schon erfolglos durchgespielt:
HTML
<xxx:format.date format="%d. %B %Y">{message.date}</xxx:format.date> um <xxx:format.date format="%H:%m">{message.date}</xxx:format.date> Uhr


Kennt jemand dieses Verhalten? Sieht jemand einen hahnebüchenden Fehler? Oder weiß jmd., ob das auf dem Server konfiguriert werden muss? icon_rolleyes.gif

fragt und grüßt
t3typ
Profil
Verfasst am: 08. 11. 2011 [15:16]
BFSven
Dabei seit: 19.10.2011
Beiträge: 106
Wie sieht denn $date im ViewHelper vor dem return aus?
Profil
Verfasst am: 08. 11. 2011 [15:24]
sunixzs
Dabei seit: 18.06.2008
Beiträge: 106
Hallo,

ganz damit befasst habe ich mich aus Zeitgründen nicht. Mir fällt nur gerade ein: Wenn es immer die selbe Ausgabe ergibt, aber Unterschiede erwartet werden, dass es womöglich am Caching liegen könnte. Das schonmal überprüft?

LG sun
Profil
Verfasst am: 08. 11. 2011 [15:30]
typo3typ
Dabei seit: 14.02.2008
Beiträge: 42
BFSven schrieb:

Wie sieht denn $date im ViewHelper vor dem return aus?


$date ist ein DateTime Object.
EDITH: Und $date->format('U') gibt den tstamp so raus, wie ich ihn erwarte...

Habe nun erst einmal den Std. Fluid date ViewHelper genommen.
Also so:
HTML
<f:format.date format="d. F Y">{message.date}</f:format.date> um <f:format.date format="H:i">{message.date}</f:format.date> Uhr


der tuts auch.

Allerdings würd ich schon gern wissen, warum der strftime viewhelper nicht funzt...


Beste Grüße

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 08.11.2011 um 15:32.]
Profil