3 Stimmen

zend locale macht mich nervös: falsche Datumsdarstellung

Zuerst hatte ich Probleme mit der Eingabe von Daten in meine Datenbank siehe hier . Jetzt habe ich Probleme, die Daten im richtigen Format in die Datenbank zu übertragen. Dies ist mein Code:

public function editAction()
    {
        if($this->_request->getParam('id')){
            $id = $this->_request->getParam('id');
            $data = $this->_evtObj->selectOneRow($id);
            // initialize the form
            //var_dump($data);
            $form = new JS_Form_EventForm();

            $array = $data->toArray(); 
            //$locale = Zend_Registry::get('locale');
            $locale = new Zend_Locale();
            $date1 = new Zend_Date($locale);
            $date1->set($array[0]['evt_startdate']);
            $array[0]['evt_startdate'] = $date1->get();
            $array[0]['evt_enddate'] = date('%d-%m-%Y',(string)$array[0]['evt_enddate']);
            $form->populate($array[0]);
            $this->view->form =$form;
        }

Wie Sie sehen können, wird das Formular mit Daten aus der Datenbank gefüllt. In der Datenbank ist das Datum als 2010-01-15 gespeichert. Wie Sie im obigen Beispiel sehen können, habe ich zwei Dinge ausprobiert:

locale = new Zend_Locale();
$date1 = new Zend_Date($locale);
$date1->set($array[0]['evt_startdate']);
$array[0]['evt_startdate'] = $date1->get();

Dies zeigt das Datum an: '1262300400'

und:

 $array[0]['evt_enddate'] = date('%d-%m-%Y',(string)$array[0]['evt_enddate']);

dies zeigt das Datum wie: '%01-%01-%1970'

Ich möchte, dass das Datum als tt-mm-jjjj angezeigt wird.

Wie kann man damit umgehen? Diese ganze Date-Sache macht mich verrückt.

Ich verwende zf 1.9.6

Irgendeine Idee?

1voto

Gordon Punkte 304254

Versuchen Sie date('d-m-Y', $array[0]['evt_enddate']) Außerdem sollte der zweite Parameter von date ein Zeitstempel sein. Ich weiß nicht, was in dem von Ihnen verwendeten Array steht, aber es muss sicherlich nicht in einen String umgewandelt werden. Wenn Sie einen Zeitstempel aus einem formatierten Datum erstellen wollen, verwenden Sie strftime().

Wenn Sie get() ohne Argumente, wird der Zeitstempel zurückgegeben. Wenn man den Datumsteil mit Zeit von Zend_Date erhalten will, verwendet man getDate() anstelle von get() . Dadurch wird der Zeitteil auf 00:00:00 gesetzt und mit dem Datum zurückgegeben. Wenn Sie nur den Datumsteil wollen, verwenden Sie get() mit der Konstante DATE_MEDIUM. Wenn man nur von Zend_Date formatieren will, verwendet man Peter Lindqvist's vorgeschlagene Antwort unten.

Stellungnahme : Persönlich würde ich vorschlagen, Zend_Date ganz zu vermeiden. Ich habe den Eindruck, dass es umständlich zu benutzen und ziemlich langsam ist im Vergleich zu PHP's nativen DateTime und DateTimezone Klassen. Ich benutze Zend_Date heutzutage nur noch für lokalisierte Formatierungen, weil es dort seine Stärken hat.

1voto

Peter Lindqvist Punkte 9942

Ich würde vorschlagen, etwas wie dieses zu verwenden

$date = new Zend_Date($array[0]['evt_startdate'],Zend_Date::DATES);
$array[0]['evt_startdate'] = $date1->toString('dd-MM-YYYY');

Dokumentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X