views:

194

answers:

2

Hello everyone,

First I had problems with getting date's into my db see here. Now I have problems with getting it into the database on the right format. This is my 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;
        }

As you can see it populates the form with dates from the db. In the db the date is saved like 2010-01-15. As you can see in the above example i tried out two things:

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

This shows the date like: '1262300400'

and:

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

this shows the date like: '%01-%01-%1970'

I want the date to be shown like dd-mm-yyyy

How to deal with this? All this date business drives me mad.

I am running zf 1.9.6

any idea's?

+1  A: 

Try date('d-m-Y', $array[0]['evt_enddate']) Also, the second param to date should be a timestamp. I do not know what is inside that array you use, but it certainly does not need to be typecasted to string. If you want to create timestamp from a formatted date, use strftime().

If you use get() without any arguments, the timestamp is returned. If you want to get the date part with time from Zend_Date use getDate() instead of get(). That will set the time part to 00:00:00 and return it with the date. If you only want the date part use get() with the DATE_MEDIUM constant. If you just want to format from Zend_Date, use Peter Lindqvist's suggested answer below.

Opinion: Personally I'd suggest to avoid Zend_Date altogether. I have the impression it is akward to use and pretty slow compared to PHP's native DateTime and DateTimezone classes. I use Zend_Date only for localized formatting nowadays, because that's where it shines.

Gordon
+1  A: 

I'd suggest using something like this

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

Documentation

Peter Lindqvist
$date = new Zend_Date($array[0]['evt_startdate'],Zend_Date::DATES); $array[0]['evt_startdate'] = $date->toString('DD-MM-YYYY');this results in:00-01-2009
sanders
had the wrong format for days. should be lowercase.
Peter Lindqvist
YYYY is the ISO year. yyyy is the real year.
smack0007