Herramientas de usuario

Herramientas del sitio


cursos:yii2: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. La forma más sencilla es utilizar la extensión Datecontrol de kartik, que se configura como un módulo que se encarga de mostrar las fechas en formato d/m/Y en los formularios, y antes de enviarse al servidor se transforman en Y-m-d. Por tanto, en el código PHP las fechas siempre estarán en formato Y-m-d.

Instalación:

composer require kartik-v/yii2-datecontrol "dev-master"
composer require kartik-v/yii2-widget-datepicker "dev-master"

En config/web.php:

use kartik\datecontrol\Module;
...
$config= [
  ...
  'modules' => [
        'datecontrol' =>  [
            'class' => '\kartik\datecontrol\Module',
            'autoWidget' => true,
            'autoWidgetSettings' => [
                Module::FORMAT_DATE => ['type' => 2, 'pluginOptions' => ['autoclose' => true]]
            ],
         ]
    ],

Y para convertir una fecha de Y-m-d a d/m/Y:

    echo  \Yii::$app->formatter->asDate($model->fecha);

Para no tener que hacer esto cada vez que necesitemos convertir una fecha en una vista, podemos crear una “propiedad” en el modelo:

public function getfechaText(){
    return \Yii::$app->formatter->asDate($this->fecha);
}

Y en cualquier vista utilizaremos $model→fechaText para mostrar la fecha con el formato correcto

En los formularios, los campos fecha se crearán de la forma siguiente:

<?= $form->field($model, 'fecha')->widget(DateControl::classname(),['pluginOptions' => ['autoclose'=>true]);  ?>

Para ver más opciones, (Fecha-hora, Hora, limitar fechas, etc…), consulta Datecontrol de kartik