使用不同格式的CJuiDatePicker发出问题

时间:2013-07-31 10:13:21

标签: php yii

我在表单中使用 CJuiDatePicker ,我需要使用两种不同的格式:mm/dd/yy要显示,dd/mm/yy要在$_POST中发送。

$questionario->widget('zii.widgets.jui.CJuiDatePicker', array(
    'model' => $modeloDoQuestionario,
    'attribute' => 'data_preenchimento',
    'language' => 'en',
    'options' => array(
        'showAnim' => 'fold',
        'showButtonPanel' => true,
        'showOn' => 'both',
        'dateFormat' => 'dd/mm/yy',
        'altField' => '#Questionarios_data_preenchimento',
        'altFormat' => 'mm/dd/yy', 
    ),
    'htmlOptions' => array(
        'style' => 'height:14px;'
    ),
));

这是HTML中的字段:

<input style="height:14px;" id="Questionarios_data_preenchimento" name="Questionarios[data_preenchimento]" type="text" />

但我仍然在mm/dd/yy中获得$_POST格式......可能出现什么问题?

2 个答案:

答案 0 :(得分:1)

您可以输入配置文件:'main.php',如下所示:

'widgetFactory' => array(
    'widgets' => array(
        'CJuiDatePicker' => array(
            'scriptFile' => 'jquery-ui.min.js',
            'language' => 'en',
            'options' => array(
                'dateFormat' => 'dd/mm/yy',
                'showAnim' => 'fold',
                'fontSize' => '0.85em',
            ),
        ),
    ),
),

有了这个,你调用'CJuiDatePicker'小部件将继承这种格式。

答案 1 :(得分:1)

我一直在寻找相同的东西,并且有一个稍微不同的解决方案。 我主要在表单页面上查找日期显示为DD-MM-YYYY,并在数据库中保存为YYYY-MM-DD。

无论在CJuiDatePicker上更改dateFormat选项,甚至尝试使用altFormat(使用altField以及显然这是必要的)选项,日期都没有以所需的格式显示,如果我要更改日期,则授予日期,格式将正确显示。

因此,我在组件中创建了一个Custom类,并创建了两个方法,一个用于将日期重新格式化为DD-MM-YYYY格式,另一个用于将日期格式化为要保存在数据库中的正确YYYY-MM-DD。 这是Custom类(该文件名为Custom.php并保存在组件中。)

class Custom
{   
 /* 
 **This method formats the date to be human readble ie 21-06-2013 
 */ 
 public function reformatDate($date)
 {
    if($date == '0000-00-00')
    {
        $newDate = '00-00-0000';
        return $newDate;
    }
    elseif($date == '')
    {
        return $date;
    }
    else
    {
        $newDate = date("d-m-Y", strtotime($date));
        return $newDate;
    }

 }

 /* 
 **This method formats the date to the correct format according to the database 
 */
 public function formatDate($date)
 {
    if($date == '00-00-0000')
    {
        $newDate = '0000-00-00';
        return $newDate;
    }
    elseif($date == '')
    {
        return $date;
    }
    else
    {
        $newDate = date("Y-m-d", strtotime($date));
        return $newDate;
    }

 }

} 

现在我有了将日期更改为正确格式的方法。在_form页面上,我在表单的启动下在顶部声明。

    $model->date_required = Custom::reformatDate($model->date_required);
    $model->date_created = Custom::reformatDate($model->date_created);
    $model->date_completed = Custom::reformatDate($model->date_completed);

现在这样可以正确显示日期,无论是查看_form页面还是通过CJuiDatePicker更改日期,因为我仍然使用dateFormat选项在日期更改时显示正确的格式。

最后,我添加了控制器的创建和更新操作以下内容。

if(isset($_POST['Tickets']))
    {

        $model->attributes=$_POST['Tickets'];
        $model->date_created = Custom::formatDate($model->date_created);
        $model->date_required = Custom::formatDate($_POST['Tickets']['date_required']);
        $model->date_completed = Custom::formatDate($_POST['Tickets']['date_completed']);
        if($model->save())

因此,在将数据保存回数据库之前,我将日期格式化为正确的格式并将其弹出到数据库中。

我不是专家,只有几个月进入Yii,大约9个月进入PHP。我知道保存方法之前和之后都有各种各样的方法,这可能不是最好的方法,事实上如果有更好的方式我都是耳朵。但是现在这对我有用。希望有人帮助。

/ *小更新* / 与一位已经做了大约十年的同事交谈后。他说删除我在表单启动时放在表单页面上的代码并将其移动到控制器中会更加清晰,所以例如我的更新方法就像这样了

public function actionUpdate($id)
{

    $model=$this->loadModel($id);
    $model->date_required = Custom::reformatDate($model->date_required);
    $model->date_created = Custom::reformatDate($model->date_created);
    $model->date_completed = Custom::reformatDate($model->date_completed);

因此,不是在表单页面上重新格式化日期,而是在loadModel之后直接完成,保持视图更清晰。