. .

Kontaktieren Sie uns

Wünschen Sie eine Offerte? Oder haben Sie Fragen zu unseren Angeboten?

Kontakt

Silverstripe: lokalisierte Datums-Ausgabe

Von Florian Thoma am 12.08.2010 | 1 Kommentare

Tags: , ,

Silverstripe und die meinsten Module verwenden die Methode Nice() der Klassen Date und Datetime zur Ausgabe des Datums. Das Problem mit diesen Funktionen ist, dass sie das Datum jeweils im Neuseeländischen Format ‘d/m/Y’ respektive ‘d/m/Y g:ia’ ausgeben, anstatt das in der Konfiguration hinterlegte Datumsformat zu verwenden.

In der Konfiguration (/mysite/_config.php) können das Zeit- und Datums-Format folgendermassen definiert werden:

// Set the site locale
i18n::set_locale('de_DE');
i18n::set_date_format('dd.MM.YYYY');
i18n::set_time_format('HH:mm');

Um nun diese Formate bei der Ausgabe zu verwenden, habe ich folgende Klassen geschrieben:

/mysite/code/LocaleDate.php:

class LocalDate extends Date {
function Nice() {
require_once 'Zend/Date.php';
if($this->value) {
$sDate = new Zend_Date($this->value);
return $sDate->toString(i18n::get_date_format());
} else {
return "";
}
}
}

/mysite/code/LocaleDatetime.php:

class LocalDatetime extends SS_Datetime {
function Nice() {
require_once 'Zend/Date.php';
if($this->value) {
$sDate  = new Zend_Date($this->value);
return $sDate->toString(i18n::get_date_format()." ".i18n::get_time_format());
} else {
return "";
}
}
}

Um diese Klassen zu verwenden, müssen sie in der Konfiguration entsprechend eingetragen werden:

// use custom class for date display
Object::useCustomClass('Date', 'LocalDate', true);
Object::useCustomClass('SS_Datetime', 'LocalDatetime', true);

Dies bewirkt, dass meine Klassen bevorzugt verwendet werden und das Datum bei der Ausgabe im entsprechenden lokalisierten Format ausgegeben wird.

Falls jemand eine schönere Lösung dieses Problem kennt, würde ich mich über Kommentare freuen.


Geben Sie einen Kommentar ab

Kommentare

  • add in /mysite/code/LocalTime.php

    <?php
    class LocalTime extends Time {
    function Nice() {
    require_once 'Zend/Date.php';
    if($this->value) {
    $sDate = new Zend_Date($this->value, 'HH:ii:ss', i18n::get_locale());

    return $sDate->toString(i18n::get_time_format());
    } else {
    return "";
    }
    }
    }

    and in _config.php

    Object::useCustomClass('Time', 'LocalTime', true);

    Erstellt von Alex. Hannel, 14.06.2011 19:26 (vor 9 Jahre)

RSS Feed für die Kommentare auf dieser Seite