2016-04-29 3 views
0

Ich habe einen Datumsfeldtyp und ein Zeitfeldtyp in meiner Tabelle. Die Tabelle hat eine Zeile: mit Zeitfeld, das Werte wie 15:00:00 und 16:00:00 hat; Ich habe den Zeittyp gewählt, da ich weiß, dass er nicht von der Zeitzone infiziert wird.Block Zeitzone Umwandlung in Mysql: Vergleichen Sie die ursprüngliche Zeit oder Datum Wert (die der Benutzer gab) zu Datenbank-Werten

Jetzt ist mein Problem der mysql Client (Benutzer) Zeitzone ist UTC + 3, wenn der Benutzer wählen möchte, wo Zeit 18:00:00 ist, betrifft das Ergebnis wo Zeitwerte 15:00:00 sind (was den Wert bedeutet wird vom Benutzer in UTC konvertiert, 18: 00: 00 = 15: 00: 00). Aber das will ich nicht.

Was ich will ist, wenn der Benutzer gibt 18:00:00 sollte es als UTC-Werte betrachtet werden, so dass 18:00:00 nur Zeilen auswählen, in denen Zeit sparen 18:00:00 nicht 15:00:00 ist. Ich versuche, select donnees.* from donnees where timefield=CONVERT_TZ(:ptime,'UTC','Africa/Nairobi'); zu verwenden, aber es funktioniert nicht und es gibt Nullwert.

Ich bin wirklich verwirrt. Wie kann ich das richtig vergleichen?

Antwort

1

Erweitern Sie das Ereignis 'on afterOpen' der db-Komponente.

In config/main.php geben 'db' Komponente wie:

'db' => [ 
    'class' => 'yii\db\Connection', 
    'dsn' => 'mysql:host=localhost;dbname=db_name', 
    'username' => 'db_username', 
    'password' => 'db_password', 
    'charset' => 'utf8', 

    'on afterOpen' => function($event) { 
      $event->sender->createCommand("SET time_zone = '+00:00'")->execute(); 
    }    
], 
+0

Aber das wird für alle Abfrage – aidonsnous

+0

Genau wirksam sein. Andernfalls können Sie "SET time_zone = '+ 00:00'" in die Datenbank senden, wenn Sie dies benötigen. –