Как форматировать даты с помощью DatePicker в Yii-Booster?

Фон

YiiBooster's Date Picker - это обертка для аккуратного маленького виджета ( bootstrap-datepicker), основанная на начальной загрузке Stefan Petre-datepicker. Это очень похоже на, но не совпадает с DatePicker JQueryUI.

проблема

Формат даты! Все эти виджеты принимают значение и отображают его как в поле ввода, так и в хорошем графическом календаре. Проблема в том, что формат даты, который мы хотим отобразить конечному пользователю, обычно не совпадает с форматом, используемым базовой базой данных. База данных, такая как MySQL, обычно хранит ее в виде типа INT (Unix timestamp) или DATE или DATETIME или TIMESTAMP, в то время как конечный пользователь должен видеть определенный формат в зависимости от локализации.

Средство выбора даты YiiBooster берет необработанное значение непосредственно из базы данных и отображает его в поле ввода. Это явно неприемлемо, особенно когда мы храним дату как метку времени Unix.

С помощью DatePicker JQueryUI это легко решается указанием опций altFormat и altField. Однако виджет YiiBooster не поддерживает эти параметры.

Вопрос

Какова лучшая практика для преодоления этой проблемы в Yii? Обратите внимание, что импорт DatePicker JQueryUI не вариант, потому что он визуально не совместим с Twitter Bootstrap.

2 ответа

Решение

Какой формат вы хотите? По умолчанию в YiiBooster DatePicker используется гггг-мм-дд чч: мтмт: сс. Ты можешь использовать 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

У нас была эта проблема в нашем приложении.

mysql: ymd
yiibooster: м / д / г

Конечно мы предпочитаем mysql формат. Мы не хотим перегрузки конверсии / в -мы хотим, чтобы каждый datetime в mysql формат.

Так как у нас много модулей и слишком много date а также datetime слишком много полей formsБыло бы нецелесообразно заставлять разработчиков менять каждый из них по отдельности, поэтому мы добавили эти строки в наш основной файл макета:

\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);

Таким образом, все date а также datetime поля работают с 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 нужно.

Другие вопросы по тегам