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
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
?>
Hallo scriptkiddie,
ich denke da hilft ein eigener ViewHelper in der Extension:
Ordner: Classes/ViewHelpers/Format
Datei: StftimeViewHelper.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:
{namespace tx = Tx_YourCamelCasedExtenionKey_ViewHelpers}
Dann kann man den ViewHelper benutzen:
<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.
Hi,
@sunixzs: Wollte mich nur bedanken für den Viewhelper. 🙂
Hat mir Zeit erspart!
Viele Grüße
merzilla
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
date.timezone = "Europe/Berlin"
zu setzen. Dann werden die Monate und Wochentage auch in Deutsch ausgegeben.
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.
Ah danke für den Hinweis, dieser kleine Unterschied war mir bisher garnicht bewusst geworden.
Hi,
ich verwende fast den gleichen ViewHelper:
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
<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 ( 🙂 )
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:
<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? #paralyzed#
fragt und grüßt
t3typ
Wie sieht denn $date im ViewHelper vor dem return aus?
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
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:
<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
typo3typ schrieb
BFSven schrieb
Wie sieht denn $date im ViewHelper vor dem return aus?
$date ist ein DateTime Object.
Ich meinte schon, was für ein Wert jeweils drin ist^^
Aber sonst ist komisch, mal wie sunixzs mit casten probiert?