it-swarm.com.de

Stellen Sie die Zeitzone ein PHP und MySQL

Ich mache eine Anwendung, in der ich das Datum in MySQL mit der Funktion PHP date() speichern muss.

<?php $finalize_at = date('Y-m-d H:i:s'); ?>

Diese Datumsangaben müssen in MySQL mit der Funktion NOW() verglichen werden, um die Differenz in Stunden anzuzeigen. Beispiel:

SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;

Das Problem ist jedoch - die Datumsfunktion PHP date('Y-m-d H:i:s') verwendet die Zeitzoneneinstellung PHP, und die Funktion NOW() übernimmt die MySQL-Zeitzone vom MySQL-Server.

Ich versuche das zu lösen:

  1. date_default_timezone_set('Europe/Paris'); Es funktioniert nur für PHP.
  2. date.timezone= "Europe/Paris"; Es funktioniert nur für PHP.
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); Diese Rückgabe ist leer.
  4. mysql> SET time_zone = 'Europe/Paris'; Dies gibt einen Fehler von der MySQL-Konsole aus.

Und die Zeitzone ändert sich für MySQL nicht.

Gibt es eine Möglichkeit, die Zeitzone für PHP und MySQL zu ändern, ohne dies von der MySQL-Konsole aus tun zu müssen, oder legen Sie eine Zeitzonenänderung in php.ini fest und machen diese Werte für PHP und MySQL verfügbar .

Vielen Dank für Ihre Unterstützung.

18

In PHP:

<?php
define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);

Für MySQL:

<?php
$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

//Your DB Connection - sample
$db = new PDO('mysql:Host=localhost;dbname=test', 'dbuser', 'dbpassword');
$db->exec("SET time_zone='$offset';");

Die Zeitzonen PHP und MySQL werden jetzt in Ihrer Anwendung synchronisiert. Keine Notwendigkeit für php.ini oder MySQL-Konsole!

Dies ist aus diesem Artikel auf SitePoint .

18
Thamilan

Sie können dies einfach durch die folgenden zwei PHP-Zeilen tun.

$tz = (new DateTime('now', new DateTimeZone('Asia/Kabul')))->format('P');
$pdo->exec("SET time_zone='$tz';");
11
MNR

Ich kann meine mysql-Standardzeitzone vom variablen Bereich aus ändern, indem ich die Zeile mit der Angabe "time zone" in phpmyadmin editiere. 

Hier können Sie auch das Format ändern und vieles mehr finden Sie unter MySQL-Support http://dev.mysql.com/doc/refman/5.7/de/time-zone-support.html , ich hoffe, es hilft Ihnen .

 enter image description here

Sie können dieselbe Zeitzone sowohl für PHP als auch für Mysql verwenden.

5
user3737083

Für PHP verwenden Sie diese Funktion:

date_default_timezone_set()

MySQL:

default-time-zone='timezone'

Wenn Sie das Privileg " root " besitzen, können Sie den Wert der globalen Zeitzone des Servers zur Laufzeit mit dieser Anweisung festlegen:

SET GLOBAL time_zone = timezone;

Zeitzonen pro Verbindung. Jeder Client, der eine Verbindung herstellt, verfügt über eine eigene Zeitzoneneinstellung, die von der Sitzung time_zone variable angegeben wird. Anfangs bezieht die Sitzungsvariable ihren Wert aus der global time_zone-Variablen, der Client kann jedoch seine eigene Zeitzone mit dieser Anweisung ändern:

SET time_zone = timezone;
1
Aalphin

Die beste Methode Zeitzone in PDO MySQL einstellen:

new PDO('mysql:Host=localhost;dbname=nametable', 'username', 'password', [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = 'Europe/Rome'"]);

1
Clary

Die beste Methode Zeitzone in PDO MySQL einstellen:

Gegebenenfalls können Sie versehentlich Folgendes verwenden: date ('P'). 

new PDO('mysql:Host=localhost;dbname=nametable', 
 'username', 
 'password', 
 [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = '".date('P')."'"]);
1
Clary