Maison > base de données > tutoriel mysql > le corps du texte

Comment puis-je synchroniser les fuseaux horaires de PHP et MySQL au sein de mon application Web sans modifier les configurations du serveur ?

DDD
Libérer: 2024-11-03 20:07:30
original
472 Les gens l'ont consulté

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

Synchronisation des fuseaux horaires dans PHP et MySQL

Dans les applications Web, il est crucial de gérer avec précision les valeurs datetime dans différents fuseaux horaires. Cependant, les paramètres de fuseau horaire par défaut de PHP et MySQL peuvent différer, entraînant des divergences dans les calculs de dates. Cet article explore les défis liés à la définition des fuseaux horaires dans PHP et MySQL et fournit une solution complète sans modifier les configurations du serveur.

Le dilemme : différents fuseaux horaires

Lors de l'utilisation de la date de PHP (), telle que date('Y-m-d H:i:s'), le paramètre de fuseau horaire PHP est appliqué. À l'inverse, la fonction NOW() de MySQL utilise le paramètre de fuseau horaire du serveur MySQL. Cette inadéquation peut entraîner des comparaisons et des calculs de dates incorrects.

Tentatives infructueuses

Le développeur a déjà essayé diverses méthodes pour modifier le fuseau horaire, notamment :

  • L'utilisation de date_default_timezone_set('Europe/Paris') affecte uniquement PHP.
  • La définition de date.timezone via PHP n'a pas d'impact sur MySQL.
  • Utilisation de SELECT CONVERT_TZ(now(), 'GMT ', 'MET') renvoie un résultat vide.
  • L'émission de SET time_zone = 'Europe/Paris' dans la console MySQL échoue.

Solution : Synchronisation

Pour synchroniser les fuseaux horaires PHP et MySQL au sein de l'application, l'approche suivante est recommandée :

1. Configuration du fuseau horaire PHP

<code class="php">define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);</code>
Copier après la connexion

Définissez un TIMEZONE constant et utilisez-le pour définir le fuseau horaire par défaut pour PHP.

2. Calcul du fuseau horaire MySQL

<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);
Copier après la connexion

Calculez le décalage entre l'heure du serveur et le fuseau horaire souhaité.

3. Paramètres du fuseau horaire MySQL

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

Exécutez une requête pour définir le fuseau horaire MySQL sur le décalage calculé.

En implémentant cette solution, les fuseaux horaires PHP et MySQL au sein de l'application seront synchronisés , garantissant des calculs et des comparaisons datetime précis quelles que soient les configurations du serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal