Yii Framework Forum: Uso di DatePicker con Mysql - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Uso di DatePicker con Mysql Rate Topic: -----

#1 User is offline   lcnlcn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 48
  • Joined: 01-October 14

Posted 06 February 2018 - 03:04 AM

Ciao a tutti ho difficoltà nel registrare un campo data in database mysql
utilizzo datePicker di kartik nel seguente modo :


$form->field($model, "DATASCADENZA", ['labelOptions' => ['label' => 'Data Operazione']])
->widget(DatePicker::classname(), [
'name' => 'DATASCADENZA',
'disabled' => false,
'pluginOptions' => [
'autoclose' => true,
'format' => 'dd/mm/yyyy'
]
]);

in visualizzazione tutto ok.
Il problema è nel registrare nel db il record.

rules del model :
.....
[['DATASCADENZA'], 'date', 'format' => 'php:Y-m-d'],
....
nel controller :
prima del $model->save()
non faccio altro che

$model->DATASCADENZA = Yii::$app->formatter->asDate($post['DATASCADENZA'], 'php:Y-m-d');

$post['DATASCADENZA'] è il campo del form.

mi da il seguente errore:

'28/12/2018' is not a valid date time value: DateTime::__construct(): Failed to parse time string (28/12/2018) at position 0 (2): Unexpected character
.......

Non riesco a capire il motivo
Vi ringrazio anticipatamente
0

#2 User is offline   lcnlcn 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 48
  • Joined: 01-October 14

Posted 06 February 2018 - 03:17 AM

Ho trovato questa soluzione :

$datetime = new \DateTime();
$newDate = $datetime->createFromFormat('d/m/Y', $post['DATASCADENZA']);
$model->DATASCADENZA = $newDate->format('Y-m-d');
$model->save();

non è molto elegante
ma per il momento posso andare avanti

si accettano comunque suggerimenti
grazie
0

#3 User is offline   hyde82 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 78
  • Joined: 15-November 10
  • Location:Italy

Posted 14 June 2018 - 07:28 AM

Crea Un behavior...

<?php

namespace app\components\behaviors;

use yii\base\Behavior;
use yii\db\ActiveRecord;
use yii\base\InvalidConfigException;


class DateBehavior extends Behavior
{
    public $owner;   
    public $date="date";
   
 
    public function init()
    {
        parent::init();
       
            if (!isset($this->date)) {
                throw new InvalidConfigException('The "date" must be specified.');
            }
        
    }
   
    public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_INSERT => 'processDate',
            ActiveRecord::EVENT_BEFORE_UPDATE => 'processDate',
            ActiveRecord::EVENT_AFTER_FIND => 'afterFind',
        ];
    }

   
    public function processDate($event)
    {
            $date = \DateTime::createFromFormat('d/m/Y', $this->owner->{$this->date});
            $this->owner->{$this->date} = $date->format('Y-m-d') ;
    }

  
    public function afterFind($event)
    {
            $date = \DateTime::createFromFormat('Y-m-d', $this->owner->{$this-$this->date});
            $this->owner->{$this->date} = $date->format('d/m/Y');

    }

}



La flessibilità di questo approccio è che può richiamarlo dai tuoi model che fanno uso di un campo data da convertire e riconvertire.
Dopo la ricerca (EVENT_AFTER_FIND), converte i formato d/m/Y, quando inserisci o modifichi (EVENT_BEFORE_INSERT || EVENT_BEFORE_UPDATE) fa si che venga prima convertito in formato Mysql e poi sparato nel DB.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users