Я делаю приложение, где мне нужно сохранить дату в 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.
Я пытаюсь решить это:
date_default_timezone_set('Europe/Paris');
Он работает только для PHP. date.timezone= "Europe/Paris";
Он работает только для PHP. SELECT CONVERT_TZ(now(), 'GMT', 'MET');
Это возвращает пустое. mysql> SET time_zone = 'Europe/Paris';
Это выдает ошибку из консоли MySQL. И часовой пояс для MySQL не меняется.
Есть ли способ изменить часовой пояс для PHP и MySQL без необходимости делать это с консоли MySQL или установить изменение часового пояса где-то в php.ini
и сделать эти значения доступными как для 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.
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;