Data Da Calendario Jquery

Salve ho inserito nel mio form un calendario jquery dove è possibile selezionare la data. Ho modificato il form da così:




<div class="row">

				<?php echo $form->labelEx($model,'data'); ?>

				<?php echo $form->textField($model,'data'); ?>

				<?php echo $form->error($model,'data'); ?>

</div>



a così questo per prendere il calendario:




<!-- Calendario Jquery -->

        <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">

        <script src="//code.jquery.com/jquery-1.9.1.js"></script>

        <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>


         <script>

                $(function() {

                $( "#data" ).datepicker();

                });

        </script>


        <p>Date: <input type="text" id="datepicker"></p>


        <!--  Fine Calendario Jquery -->







Questa la nuova riga nel form :




<div class="row">

				<label for="Film_data" class="required">Data Uscita<span class="required">*</span></label>	

				<input name="Film[data]" id="Film_data" type="text"  />

				<div class="errorMessage" id="Film_data_em_" style="display:none"></div>			

/div>



Il problema è che la data mi esce in formato italiano , quando il db mysql necessita di dat uk, il metodo che salva i dati nel db

prende tutti i dati con un solo comando:





$model->attributes=$_POST['My_form'];

	



Quando invece io avrei bisogno di modificare la data invertendola con dei substr e poi salvarla .

Devo riscrivere tutto il codice prendendo ogni singolo $_POST (sono circa 50) oppure è possible prendere tutti i dati e dirgli prima di salvare di modificare la data :




$d=$_POST['data']

        

$data =substr($d,-4)."/".substr($d,3,2)."/".  substr($d, 0, 2);

                



e poi salvarla:




if($model->save())

	$this->redirect(array('view','id'=>$model->Id_test));



E’ possibile?

scusa se rispondo un po frettolosamente, questo potrebbe risolvere il tuo problema:




<?php  echo $form->hiddenField($model,'data_from'); ?>

            <?php

                $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                    'id'                => 'data-from-on-screen',

                    'name'              => 'data-from-on-screen',

                    'value'             => Yii::app()->format->italianDate($model->data_from),

                    'language'          => 'it',

                    'htmlOptions'       => array(

                        'size'          	=> '10',

                        'maxlength'     	=> '10',

                        'class'             => 'form-control',

                    ),

                    'options'           => array (

                        'dateFormat'    => "dd/mm/yy",

                        'altField'      => '#OrdiniCaricati_data_from',

                        'altFormat'     => 'yy-mm-dd',

                    ),

                ));

            ?>



nella view ci metti due campi

  • uno nascosto che tiene la data mysql, e che deriva da $model->nome_del_campo_date

  • uno visibile tramite l’uso del cjuidatepicker, il quale utilizzerà la data italiana.

a quel punto è il js del datepicker che fa tutto, non devi scrivere alcun codice

EDIT: per completezza:




    /**

     * @param string $value Date in mysql format

     */

    public function formatItalianDate($value) 

    {

        if ($value == "0000-00-00") return "";

        return $this->getLocale()->dateFormatter->format('dd/MM/yyyy', $value);

    }



Scusa ma non è molto chiaro , avevo gia messo il widget nel form così:




<div class="row">

					<?php echo $form->labelEx($model,'data'); ?>

					<?php

					$this->widget('zii.widgets.jui.CJuiDatePicker', array(

					    'model' => $model,

					    'attribute' => 'data',

					    'language'=>'it',

					    'options' => array(

					        

					        'dateFormat' => 'yy-mm-dd',     // formato 2014-03-10

					        

					        'changeYear' => true,           

					        'changeMonth' => true,          

					        

					        

					    ),

					    'htmlOptions' => array(

					        'size' => '10',         // textField size

					        'maxlength' => '10',    // textField maxlength

					    ),

					));

					?>

					<?php echo $form->error($model,'data'); ?>

</div>		



funziona benissimo ma è brutto da vedere perchè la data appare in formato uk , io vorrei che la data apparisse nel campo in formato dd-mm-yy ma venisse salvata nel formato uk .

Inoltre La funzione che hai messo dove va inserita?

Ripeto, provo ad essere piu chiaro

  1. Il campo del model deve essere un hidden field. Nel tuo caso



<?php echo $form->hiddenField($model,'data'); ?>



  1. Il datepicker userà il formato di data ITALIANO, e sarà automaticamente agganciato al campo hidden, che invece avrà la data in formato mysql. Per far questo sia usa la configurazione ‘options’ del datepicker stesso. Nota che il primo formato è come jQueryUI si apsetta la data italiana. NON è intuitivo, ma è così ed è corretto.

Quindi gli diamo il selettore dell’id dell’hiddenField e gli diciamo che invece quello è in formato mysql yyyy-mm-dd. Anche in questo caso, il formato della data è specificato come vuole jQueryUI, e non come siamo abituati in php.




'options'           => array (

                        'dateFormat'    => "dd/mm/yy",

                        'altField'      => '#<nome_classe_del_model>_data',

                        'altFormat'     => 'yy-mm-dd',

                    ),



  1. Per settare inizialmente il value visibile usi l’opzione ‘value’ del datepicker, passandogli il formato gg/mm/yyyy che siamo abituati ad avere qui in Italia



'value'             => Yii::app()->getLocale()->dateFormatter->format('dd/MM/yyyy', $value);