Установить часовой пояс в PHP и MySQL

Я делаю приложение, где мне нужно сохранить дату в MySQL, используя функцию PHP date() .

 <?php $finalize_at = date('Ymd H:i:s'); ?> 

Эти даты необходимо сравнить в MySQL с помощью функции NOW() чтобы вернуть разницу в часах, например:

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

Но проблема в том, что дата даты функции PHP date('Ymd H:i:s') использует настройку часового пояса PHP, а функция NOW() занимает время MySQL с сервера MySQL.

Я пытаюсь решить это:

  1. date_default_timezone_set('Europe/Paris'); Он работает только для PHP.
  2. date.timezone= "Europe/Paris"; Он работает только для PHP.
  3. SELECT CONVERT_TZ(now(), 'GMT', 'MET'); Это возвращает пустое.
  4. mysql> SET time_zone = 'Europe/Paris'; Это выдает ошибку из консоли MySQL.

И часовой пояс для MySQL не меняется.

Есть ли способ изменить часовой пояс для PHP и MySQL без необходимости делать это с консоли MySQL или установить изменение часового пояса где-то в php.ini и сделать эти значения доступными как для PHP, так и для MySQL.

Очень ценю вашу поддержку.

Solutions Collecting From Web of "Установить часовой пояс в PHP и MySQL"

В PHP:

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

Для 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';"); 

Временные зоны PHP и MySQL теперь синхронизируются в вашем приложении. Не нужно идти на php.ini или консоль MySQL!

Это из этой статьи на SitePoint .

Вы можете сделать это легко только двумя строками PHP.

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

Я могу изменить свой часовой пояс mysql по умолчанию из раздела переменных, отредактировав строку, которая говорит «часовой пояс» в phpmyadmin.

Здесь вы также можете изменить формат и многое другое, которое вы можете найти в поддержке mysql http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html , я надеюсь, что он вам поможет.

введите описание изображения здесь

Вы можете установить одинаковый часовой пояс для php и mysql.

Лучший метод Установите часовой пояс в PDO MySQL:

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

Лучший метод Установите часовой пояс в PDO MySQL:

При необходимости, по ошибке вы можете использовать: date ('P') Пример:

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

Для PHP используйте эту функцию:

 date_default_timezone_set() 

MySQL:

 default-time-zone='timezone' 

Если у вас есть привилегия root , вы можете установить значение глобального часового сервера во время выполнения с помощью этого оператора:

 SET GLOBAL time_zone = timezone; 

Часовой пояс за соединение. Каждый клиент, который подключается, имеет свой собственный часовой пояс, заданный time_zone variable . Первоначально переменная сеанса принимает свое значение из global time_zone переменной global time_zone , но клиент может изменить свой собственный часовой пояс с помощью этого оператора:

 SET time_zone = timezone;