1

背景

YiiBoosterDate Picker是一个基于Stefan Petre 的 bootstrap- datepicker的简洁小部件 ( bootstrap-datepicker ) 的包装器。它与JQueryUI 的 DatePicker非常相似,但又不同。

问题

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

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

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

问题

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

4

2 回答 2

1

你想要什么格式?YiiBooster 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

于 2014-04-06T08:48:18.027 回答
0

我们的应用程序中遇到了这个问题。

mysql : Ymd
yiibooster : m/d/Y

当然,我们更喜欢 mysql格式。我们不想要 to 的转换重载/-我们想要 every datetimeinmysql格式。

由于我们有很多模块和太多的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

于 2016-09-05T11:19:01.100 回答