Heim >Datenbank >MySQL-Tutorial >Wie kann ich die Zeitzonen von PHP und MySQL in meiner Webanwendung synchronisieren, ohne die Serverkonfigurationen zu ändern?

Wie kann ich die Zeitzonen von PHP und MySQL in meiner Webanwendung synchronisieren, ohne die Serverkonfigurationen zu ändern?

DDD
DDDOriginal
2024-11-03 20:07:30519Durchsuche

How can I synchronize PHP's and MySQL's timezones within my web application without modifying server configurations?

Zeitzonen in PHP und MySQL synchronisieren

In Webanwendungen ist der genaue Umgang mit Datums- und Uhrzeitwerten über verschiedene Zeitzonen hinweg von entscheidender Bedeutung. Allerdings können die Standard-Zeitzoneneinstellungen von PHP und MySQL unterschiedlich sein, was zu Diskrepanzen bei der Datumsberechnung führen kann. Dieser Artikel untersucht die Herausforderungen beim Festlegen von Zeitzonen in PHP und MySQL und bietet eine umfassende Lösung ohne Änderung der Serverkonfigurationen.

Das Dilemma: Unterschiedliche Zeitzonen

Bei Verwendung des PHP-Datums ()-Funktion, wie etwa date('Y-m-d H:i:s'), wird die PHP-Zeitzoneneinstellung angewendet. Umgekehrt verwendet die NOW()-Funktion von MySQL die Zeitzoneneinstellung des MySQL-Servers. Diese Nichtübereinstimmung kann zu falschen Datumsvergleichen und -berechnungen führen.

Fehlgeschlagene Versuche

Der Entwickler hat zuvor verschiedene Methoden ausprobiert, um die Zeitzone zu ändern, darunter:

  • Die Verwendung von date_default_timezone_set('Europe/Paris') wirkt sich nur auf PHP aus.
  • Das Festlegen von date.timezone über PHP hat keine Auswirkungen auf MySQL.
  • Die Verwendung von SELECT CONVERT_TZ(now(), 'GMT ', 'MET') gibt ein leeres Ergebnis zurück.
  • Die Ausgabe von SET time_zone = 'Europe/Paris' in der MySQL-Konsole schlägt fehl.

Lösung: Synchronisierung

Um die PHP- und MySQL-Zeitzonen innerhalb der Anwendung zu synchronisieren, wird folgende Vorgehensweise empfohlen:

1. PHP-Zeitzonenkonfiguration

<code class="php">define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);</code>

Definieren Sie eine konstante ZEITZONE und verwenden Sie diese, um die Standardzeitzone für PHP festzulegen.

2. MySQL-Zeitzonenberechnung

<code class="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);

Berechnen Sie den Versatz zwischen der Serverzeit und der gewünschten Zeitzone.

3. MySQL-Zeitzoneneinstellung

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

Führen Sie eine Abfrage aus, um die MySQL-Zeitzone auf den berechneten Offset festzulegen.

Durch die Implementierung dieser Lösung werden die PHP- und MySQL-Zeitzonen innerhalb der Anwendung synchronisiert , wodurch genaue Datums-/Uhrzeitberechnungen und -vergleiche unabhängig von der Serverkonfiguration gewährleistet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich die Zeitzonen von PHP und MySQL in meiner Webanwendung synchronisieren, ohne die Serverkonfigurationen zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn