Datumsausgabe auf deutsch

  • 0 x
    93 Beiträge
    0 Hilfreiche Beiträge
    18. 02. 2011, 14:00

    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:

    1. <?php
    2. date_default_timezone_set('Europe/Berlin');
    3. // Set the gloabal LC_TIME constant to german
    4. setlocale(LC_TIME, 'de_DE');
    5. // Little bit other Syntax but better effect
    6. echo "time " . strftime('%A, %d. %B %Y') . "<br>"; //Output: Mittwoch, 07. September 2005
    7. ?>


  • sunixzs sunixzs
    R2-D2
    0 x
    123 Beiträge
    2 Hilfreiche Beiträge
    24. 02. 2011, 12:59

    Hallo scriptkiddie,

    ich denke da hilft ein eigener ViewHelper in der Extension:

    Ordner: Classes/ViewHelpers/Format
    Datei: StftimeViewHelper.php

    1. /**
    2.  * Formats a Timestamp or DateTime-Object in strftime()
    3.  * @api
    4.  */
    5. class Tx_YourCamelCasedExtenionKey_ViewHelpers_Format_StrftimeViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
    6.  
    7. /**
    8. * Render the supplied DateTime object as a formatted date using strftime.
    9. *
    10. * @param mixed $date either a DateTime object or a string (UNIX-Timestamp)
    11. * @param string $format Format String which is taken to format the Date/Time
    12. * @return string Formatted date
    13. * @api
    14. */
    15. public function render($date = NULL, $format = '%A, %d. %B %Y') {
    16. if ($date === NULL) {
    17. $date = $this->renderChildren();
    18. if ($date === NULL) {
    19. return '';
    20. }
    21. }
    22. if ($date instanceof DateTime) {
    23. try {
    24. return strftime($format, $date->getTimestamp());
    25. } catch (Exception $exception) {
    26. throw new Tx_Fluid_Core_ViewHelper_Exception('"' . $date . '" was DateTime and could not be converted to UNIX-Timestamp by DateTime.', 200000001);
    27. }
    28. }
    29. return strftime($format, (int)$date);
    30. }
    31. }

    Im Template den NameSpace deklarieren:

    1. {namespace tx = Tx_YourCamelCasedExtenionKey_ViewHelpers}

    Dann kann man den ViewHelper benutzen:

    1. <tx:format.strftime date="{MyDateTime}" format="%A, der %d. %B %Y" />
    2.  
    3. <!-- oder: -->
    4.  
    5. <tx:format.strftime format="%A, der %d. %B %Y" />{MyDateTime}</tx:format.strftime>
    6.  
    7. <!-- oder als Timestamp sollte es auch funktionieren: -->
    8.  
    9. <tx:format.strftime format="%B %Y">1297897200</tx:format.strftime>

    LG sun

    Edith sagt: @ vor dem Timestamp im Beispiel entfernt.

  • merzilla merzilla
    T3PO
    0 x
    15 Beiträge
    0 Hilfreiche Beiträge
    26. 07. 2011, 21:22

    Hi,

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

    Viele Grüße
    merzilla

  • Eydamos Eydamos
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    27. 07. 2011, 10:18

    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

    1. date.timezone = "Europe/Berlin"

    zu setzen. Dann werden die Monate und Wochentage auch in Deutsch ausgegeben.

  • sunixzs sunixzs
    R2-D2
    0 x
    123 Beiträge
    2 Hilfreiche Beiträge
    27. 07. 2011, 10:24

    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.

  • Eydamos Eydamos
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    27. 07. 2011, 10:51

    Ah danke für den Hinweis, dieser kleine Unterschied war mir bisher garnicht bewusst geworden.

  • typo3typ typo3typ
    Padawan
    0 x
    42 Beiträge
    0 Hilfreiche Beiträge
    07. 11. 2011, 18:04

    Hi,

    ich verwende fast den gleichen ViewHelper:

    1. public function render($date = NULL, $format = '%Y-%m-%d') {
    2. if ($date === NULL OR $date == '0') {
    3. $date = $this->renderChildren();
    4. if ($date === NULL) {
    5. return '';
    6. }
    7. }
    8. if (!$date instanceof DateTime) {
    9. try {
    10. $date = new DateTime($date);
    11. } catch (Exception $exception) {
    12. throw new Tx_Fluid_Core_ViewHelper_Exception('"' . $date . '" could not be parsed by DateTime constructor.', 1241722579);
    13. }
    14. }
    15.  
    16. return strftime($format,$date->format('U'));
    17.  
    18. }

    Wenn ich nun mit

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

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

  • BFSven BFSven
    R2-D2
    0 x
    106 Beiträge
    2 Hilfreiche Beiträge
    08. 11. 2011, 15:16

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

  • sunixzs sunixzs
    R2-D2
    0 x
    123 Beiträge
    2 Hilfreiche Beiträge
    08. 11. 2011, 15:24

    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

  • typo3typ typo3typ
    Padawan
    0 x
    42 Beiträge
    0 Hilfreiche Beiträge
    08. 11. 2011, 15:30

    [quote="BFSven"]
    Wie sieht denn $date im ViewHelper vor dem return aus?
    [/quote]

    $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:

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