====== 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 [[http://demos.krajee.com/datecontrol|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 [[http://demos.krajee.com/datecontrol|Datecontrol de kartik]]