web-dev-qa-db-fra.com

Définir le fuseau horaire dans PHP et MySQL

Je crée une application où je dois stocker cette date dans MySQL en utilisant la fonction PHP date().

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

Ces dates doivent être comparées dans MySQL à l'aide de la fonction NOW() pour renvoyer la différence en heures, par exemple:

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

Mais le problème est que - la fonction de date PHP date('Y-m-d H:i:s') utilise le paramètre de fuseau horaire PHP et que la fonction NOW() prend le fuseau horaire MySQL du serveur MySQL.

J'essaie de résoudre 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'); Ce retour est vide.
  4. mysql> SET time_zone = 'Europe/Paris'; Cela jette une erreur de la console de MySQL.

Et le fuseau horaire ne change pas pour MySQL.

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

J'apprécie beaucoup votre soutien.

18

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 la console MySQL!

Ceci est tiré de cet article de SitePoint .

18
Thamilan

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

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

Je peux changer mon fuseau horaire par défaut mysql de la section variable en modifiant la ligne indiquant "fuseau horaire" dans phpmyadmin. 

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

 enter image description here

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

5
user3737083

Pour PHP, utilisez cette fonction:

date_default_timezone_set()

MySQL:

default-time-zone='timezone'

Si vous avez le privilège root , vous pouvez définir la valeur du fuseau horaire du serveur global au moment de l'exécution à l'aide de cette instruction:

SET GLOBAL time_zone = timezone;

Fuseaux horaires par connexion. Chaque client qui se connecte a son propre fuseau horaire, défini par la session time_zone variable. Initialement, la variable de session tire sa valeur de la variable global time_zone, mais le client peut modifier son propre fuseau horaire avec cette instruction:

SET time_zone = timezone;
1
Aalphin

La meilleure méthode Définir le fuseau horaire dans PDO MySQL:

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

1
Clary

La meilleure méthode Définir le fuseau horaire dans PDO MySQL:

Le cas échéant, vous pouvez utiliser par erreur: 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
Clary