Herramientas de usuario

Herramientas del sitio


cursos:yii:fechas

Trabajar con fechas

El formato de fecha en las bases de datos tiene la estructura inglesa: año-mes-dia para fechas(tipo date) y año-mes-dia hora:minutos:segundos para datetime. Cuando insertamos registros en la base de datos o recuperamos información debemos hacerlo con este formato, que no coincide con el que utilizamos a la hora de presentarlas en español: dia/mes/año.

Existen varias formas de solucionar el problema. Una consiste en sobreescribir los métodos beforeSave y afterFind de cada modelo que tenga datos de tipo date o datetime y cambiar el formato de los mismos (en beforeSave convirtiéndolos a Y-m-d y en afterFind a d/m/Y). Este sistema es óptimo, pero laborioso.

La forma más sencilla es instalar la extensión DateTimeI18NBehavior y aplicarla mediante el método behaviors a las clases que contengan datos de tipo date o datetime . Esta extensión se encargará de hacer las conversiones correspondientes antes de salvar datos y después de leerlos de la base datos.

Podemos descargar la clase DateTimeI18NBehavior en la carpeta components, y así, en los modelos pondremos:

public function behaviors()
{
    return array('datetimeI18NBehavior' => array('class' => 'DateTimeI18NBehavior'));
}

En los formularios, podemos utilizar el wiget CJuiDatePicker para solicitar datos de tipo fecha:

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
        'model'=>$model,
        'attribute'=>'fecha_envio',
        'options'=>array(
                'dateFormat'=>'dd/mm/yy',
                'language'=>'es',
                'minDate'=>'+1d', //La fecha ha de ser como mínimo mañana
        ),
));