[Yii 1] Formato Data

Ho bisogno, ancora una volta, del vostro aiuto;

in una tabella (event) ho 2 campi (event_date e event_dateExpiration), questi 2 campi prendono come input 2 date tramite il datePicker.

Il problema sorge nel momento in cui io voglio salvare la data del secondo campo, infatti il primo campo(event_date) riesce a salvare la data nel formato in cui desidero, mentre il secondo(event_dateExpiration) mi salva la data in questo modo: 30-11-1999 pur avendo inserito un altra data.

passiamo alla sostanza, questo é il codice:

model


protected function afterFind() {

        list($y, $m, $d) = explode('-', $this->event_date);

        $mk = mktime(0, 0, 0, $m, $d, $y);

        $this->event_date = date('d-m-Y', $mk);

        

        list($a, $b, $c)=explode('-', $this->event_dateExpiration);

        $abc=mktime(0,0,0,$a,$b,$c);

        $this->event_dateExpiration=date('d-m-Y', $abc);


        return parent::afterFind();

    }


    protected function beforeSave() {

        list($d, $m, $y) = explode('-', $this->event_date);

        $mk = mktime(0, 0, 0, $m, $d, $y);

        $this->event_date = date('Y-m-d', $mk);

        

        list($a, $b, $c)=explode('-', $this->event_dateExpiration);

        $abc=mktime(0,0,0,$a,$b,$c);

        $this->event_dateExpiration=date('d-m-Y', $abc);


        return parent::beforeSave();

    }

_form


<?php 

            echo '<p style="margin-bottom:5px;">Data</p>';

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

                'model'=>$model,

                'attribute'=>'event_date',

                'value'=>$model->event_date,

                'language'=>'it',

                'options'=>array(

                        'showAnim'=>'fold',

                        'mode'=>'datetime',

                        'dateFormat' => 'dd-mm-yy', // save to db format 

                ),

                'htmlOptions' => array(

                    'style' => 'height:20px;'

                ),

            ));

        ?>


        <?php 

            echo '<p style="margin-bottom:5px;">Scadenza</p>';

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

                'model'=>$model,

                'attribute'=>'event_dateExpiration',

                'value'=>$model->event_dateExpiration,

                'language'=>'it',

                'options'=>array(

                        'showAnim'=>'fold',

                        'mode'=>'datetime',

                        'dateFormat' => 'dd-mm-yy', // save to db format 

                ),

                'htmlOptions' => array(

                    'style' => 'height:20px;'

                ),

            ));

        ?>

Grazie in anticipo!

Ora dedico qualche minuto a studiare dove potrebbe essere l’errore.

nel frattempo posso suggerirti una via alternativa?

il datepicker può essere configurato per visualizzare la data in italiano, come hai fatto tu, ma anche contemporaneamente per utilizzare un hidden field in formato a tua scelta (ma comodo yy-mm-dd, equivalente del formato mysql yyyy-mm-dd)

Per usarlo devi solo creare nel model due variabili di supporto, uno per ciascun campo visibile, mentre i nomi di quelli nascosti devono corrispondere ai campi "buoni" del model.

In fase di salvataggio / recupero / visualizzazione yii e il CJuiDatePicker fanno tutto il resto.

Grazie per avermi risposto così in fretta…

perdona la mia ignoranza, ma avresti qualche esempio da propormi, sono avverso alla teoria:)

Io ho un model “ordine” con un campo ‘data’

Ho scritto così nella vista _form, per usare il campo visibile ("data_on_screen") in formato data italiana, mentre quello nascosto ("data", che è il nome del field del model) in formato mysql




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

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

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

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

    'value'             => Yii::app()->locale->dateFormatter->format("dd/MM/yyyy", $model->data) ,

    'language'          => 'it',

    

    'options'           => array (

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

        'altField'      => '#Ordini_data',

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

    ),

));



Cioè ho creato un hidden field col campo del modello, ed ho usato questo come altField.

quello del datePicker è una campo visibile, formattato come data italiana ‘a forza’

quello dell’altField è in formato equivalente mysql (corrisponde a yyyy-mm-dd)

quindi nel model 'Ordine" ho fatto così




class Ordini extends CActiveRecord

{

	// support for date range search

	public $data_on_screen;