Définir le fuseau horaire en PHP et MySQL

je fais une application où je dois stocker la date dans MySQL en utilisant le PHP date() fonction.

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

ces dates doivent être comparées dans MySQL en utilisant le NOW() fonction pour renvoyer la différence en heures, par exemple:

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

mais le problème est – la fonction date de PHP date('Y-m-d H:i:s') utilise le paramètre PHP timezone, et le NOW() la fonction prend le timezome MySQL du serveur MySQL.

j'essaie de résoudre faire ceci:

  1. date_default_timezone_set('Europe/Paris'); cela ne fonctionne que pour PHP.
  2. date.timezone= "Europe/Paris"; cela ne fonctionne que pour PHP.
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); cette déclaration est vide.
  4. mysql> SET time_zone = 'Europe/Paris'; ceci envoie une erreur de la console de MySQL.

et le fuseau horaire ne change pas pour MySQL.

y a-t-il un moyen de changer le fuseau horaire de PHP et MySQL sans avoir à le faire depuis la console MySQL, ou de définir un changement de fuseau horaire depuis quelque part dans php.ini et rendre ces valeurs disponibles pour PHP et MySQL.

J'apprécie beaucoup votre soutien.

18
demandé sur PdC 2015-12-23 07:17:04

6 réponses

en PHP:

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

Pour 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';");

les fuseaux horaires PHP et MySQL sont maintenant synchronisés dans votre application. Pas besoin d'aller pour php.ini ou console MySQL!

C'est à partir de cette l'article sur SitePoint.

15
répondu Thamilan 2016-04-12 16:16:13

Vous pouvez le faire facilement juste par les deux lignes suivantes de PHP.

$tz = (new DateTime('now', new DateTimeZone('Asia/Kabul')))->format('P');
$pdo->exec("SET time_zone='$tz';");
9
répondu MNR 2016-10-23 15:39:30

je peux modifier mon fuseau horaire par défaut mysql à partir de la section variable en éditant la ligne qui dit "fuseau horaire" dans phpmyadmin.

Ici, vous pouvez également changer le format et beaucoup plus que vous pouvez trouver dans le support de mysql http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html, j'espère que sa vous aider.

enter image description here

Vous pouvez mettre même fuseau horaire pour php et mysql.

5
répondu 2015-12-23 05:45:51

the best method Set timezone in AOP MySQL:

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

1
répondu Clary 2016-12-20 12:46:37

the best method Set timezone in AOP MySQL:

le Cas échéant, si par erreur, vous pouvez utiliser: date('P') Exemple:

new PDO('mysql:host=localhost;dbname=nametable', 
 'username', 
 'password', 
 [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = '".date('P')."'"]);
1
répondu Clary 2016-12-20 13:18:51

pour PHP utilisez cette fonction:

date_default_timezone_set()

MySQL:

default-time-zone='timezone'

si vous avez le racine Privilège, vous pouvez définir la valeur du fuseau horaire du serveur global à l'exécution avec cette instruction:

SET GLOBAL time_zone = timezone;

fuseaux horaires par connexion. Chaque client qui se connecte a son propre réglage de fuseau horaire, donné par la session time_zone variable. Au départ, la variable session prend sa valeur de global time_zone variable, mais le client peut modifier son propre fuseau horaire cette instruction:

SET time_zone = timezone;
0
répondu Aalphin 2017-09-13 11:26:55