it-roy-ru.com

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

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

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

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

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

Но проблема в том, что функция даты PHP date('Y-m-d 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 ,.

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

18
Learning and sharing

В 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 .

18
Thamilan

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

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

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

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

 enter image description here

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

5
user3737083

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

date_default_timezone_set()

MySQL:

default-time-zone='timezone'

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

SET GLOBAL time_zone = timezone;

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

SET time_zone = timezone;
1
Aalphin

Лучший способ установить часовой пояс в 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

Лучший способ установить часовой пояс в 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')."'"]);
1
Clary