2013-07-31 2 views
1

Я использую в моей форме CJuiDatePicker и мне нужно использовать два разных формата: mm/dd/yy быть показаны и dd/mm/yy, отправляемые в $_POST.Проблема с использованием CJuiDatePicker с различными форматами

$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 ... Что может быть не так?

+0

Формат 'alt', предоставленный вами' 'altFormat '=>' mm/dd/yy ',' – DevZer0

+0

@ DevZer0 Как вы думаете, я должен использовать 'alt' так? В [reference] (http://api.jqueryui.com/datepicker/) отображается «altFormat». Я понятия не имел. –

+1

У вас на самом деле есть скрытый ввод 'altField'? –

ответ

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 наследуют этот формат.

+0

Это интересно сделать в приложении со многими экземплярами CJuiDatePicker. Примечание. Мне просто понравилось в вашем примере кода, но dateFormat по-прежнему не возвращает то, что я ожидал вначале. Но я буду использовать скрытое поле, как сказал @ineersa. Спасибо вам всем! –

1

Я искал одно и то же и немного изменил решение. Я в основном искал на страницах форм, чтобы отобразить дату как 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, сохраняя вид чище.

Смежные вопросы