如何使用Yii-Booster中的DatePicker格式化日期?

时间:2014-04-06 05:45:32

标签: twitter-bootstrap yii yii-booster

背景

YiiBooster' s Date Picker是一个基于bootstrap-datepicker的整洁小部件(Stefan Petre's bootstrap-datepicker)的包装器。它与JQueryUI's DatePicker非常相似,但不一样。

问题

日期格式!所有这些小部件都获取一个值,并在输入字段和漂亮的图形日历中显示它。问题是我们要向最终用户显示的日期格式通常与底层数据库使用的格式不同。像MySQL这样的数据库通常会将它存储在INT(Unix时间戳)或DATE或DATETIME或TIMESTAMP之类的内容中,而最终用户应该看到特定的格式,具体取决于本地化。

YiiBooster的日期选择器直接从数据库中获取原始值并将其显示在输入字段中。这显然是不可接受的,特别是当我们将日期存储为Unix时间戳时。

使用JQueryUI的DatePicker,可以通过指定altFormataltField选项轻松解决此问题。但是,YiiBooster的小部件不支持这些参数。

问题

在Yii中克服此问题的最佳做法是什么?请注意,导入JQueryUI的DatePicker不是一个选项,因为它与Twitter Bootstrap在视觉上不兼容。

2 个答案:

答案 0 :(得分:1)

您想要什么格式? YiiBooster中的Deafult DatePicker是yyyy-mm-dd hh:mtmt:ss。 您可以使用afterFind函数来执行此操作。在这里,我给你举了一个例子:

protected function afterFind(){
parent::afterFind();

//this will change format to dd month's name year
$this->attribute=date('d F, Y',strtotime(str_replace("-", "", $this->attribute)));       
}

只需将其放入Model即可。 希望这有帮助。 CMIIW

答案 1 :(得分:0)

我们的申请中遇到了这个问题。

mysql :Y-m-d
yiibooster :m / d / Y

当然,我们更喜欢 mysql格式。 我们不希望/-的转换超载,我们希望datetime格式的每个mysql

由于我们在date中有很多模块和datetimeforms个字段太多,强制开发人员分别更改每个模块并不是一个好习惯,所以我们在我们的主布局文件中添加了这些行:

\Yii::app()->getClientScript()->registerScript("jquery-date-fix",
"
if($.fn.datepicker){
    $.fn.datepicker.defaults.format = 'yyyy-mm-dd';
    $.fn . datepicker . defaults . autoclose = true;
}
",
\CClientScript::POS_HEAD);

通过这种方式,所有datedatetime字段都使用mysql日期格式,而不是那种该死的/格式。

我们只需使用小部件:

echo $form->datePickerGroup($manageForm, 'dateOfHire', [
    'wrapperHtmlOptions' => [
        'class' => 'col-sm-5'
    ],
    'widgetOptions' => [
        'options' => [
            'startView' => 2,
            'changeMonth' => true,
            'changeYear' => true,
            'yearRange' => "-100:+0",
            'language' => 'us',
            'autoclose' => true,
            'todayHighlight' => true,
        ],
    ],
    'groupOptions' => [
        'class' => 'col-sm-6',
    ],
    'append' => '<label for="' . $manageForm->getId() . '_dateOfHire" class="glyphicon glyphicon-calendar"></label>',
]);

不需要在forms进行额外转换。