zend locale让我感到紧张:错误的日期表达

时间:2010-01-05 08:47:44

标签: php zend-framework

首先,我遇到了将日期记入我的数据库see here的问题。现在我遇到了以正确格式进入数据库的问题。 这是我的代码:

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;
        }

正如您所见,它使用db中的日期填充表单。在数据库中,日期保存为2010-01-15。正如您在上面的示例中所看到的,我尝试了两件事:

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

这显示日期,如:'1262300400'

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

这显示的日期如下:'%01-%01-%1970'

我希望日期显示为dd-mm-yyyy

如何处理?所有这些日期业务让我很生气。

我正在运行zf 1.9.6

任何想法?

2 个答案:

答案 0 :(得分:1)

试试date('d-m-Y', $array[0]['evt_enddate']) 此外,迄今为止的第二个参数应该是时间戳。我不知道你使用的数组内部是什么,但它肯定不需要被字符串化。如果要从格式化日期创建时间戳,请使用strftime()。

如果使用不带任何参数的get(),则返回时间戳。如果您想从Zend_Date获取带有时间的日期部分,请使用getDate()而不是get()。这会将时间部分设置为00:00:00并将其与日期一起返回。如果您只希望日期部分使用get()和DATE_MEDIUM常量。如果您只想从Zend_Date格式化,请使用Peter Lindqvist建议的答案。

意见:我个人建议完全避免使用Zend_Date。我觉得与PHP的原生DateTime和DateTimezone类相比,它使用起来很慢并且非常慢。我现在只使用Zend_Date进行本地化格式化,因为它就是它闪耀的地方。

答案 1 :(得分:1)

我建议使用类似的东西

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

Documentation