Я искал одно и то же и немного изменил решение. Я в основном искал на страницах форм, чтобы отобразить дату как DD-MM-YYYY и сохранить в базе данных как YYYY-MM-DD.
Независимо от изменения параметра dateFormat на CJuiDatePicker и даже попытки использовать параметр altFormat (с использованием опции altField, а также, по-видимому, это необходимо), дата не отображалась в желаемом формате, если бы я должен был изменить дату, формат будет показан правильно.
Таким образом, я создал пользовательский класс в компонентах и создал два метода: один для переформатирования даты в формате DD-MM-YYYY и один для форматирования даты до правильного YYYY-MM-DD для сохранения в базе данных , Вот Пользовательский класс (файл называется 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, сохраняя вид чище.
Формат 'alt', предоставленный вами' 'altFormat '=>' mm/dd/yy ',' – DevZer0
@ DevZer0 Как вы думаете, я должен использовать 'alt' так? В [reference] (http://api.jqueryui.com/datepicker/) отображается «altFormat». Я понятия не имел. –
У вас на самом деле есть скрытый ввод 'altField'? –