web-dev-qa-db-ja.com

タイムゾーンをPHPおよびMySQLに設定します

PHP date()]関数を使用して、MySQLに日付を保存する必要があるアプリケーションを作成しています。

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

これらの日付は、MySQLでNOW()関数を使用して比較し、時間の差を返す必要があります。次に例を示します。

_SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;
_

しかし、問題は– PHP date function 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のタイムゾーンは変わりません。

MySQLコンソールから行うことなく、PHPとMySQLの両方のタイムゾーンを変更する方法、または_php.ini_のどこかからタイムゾーンの変更を設定し、これらの値を使用可能にする方法はありますかPHPおよびMySQL。

サポートに感謝します。

19

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の記事 です。

20
Thamilan

次の2行のPHPを使用するだけで簡単に実行できます。

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

Phpmyadminの「タイムゾーン」という行を編集することで、mysqlのデフォルトタイムゾーンを可変セクションから変更できます。

ここでは、フォーマットを変更したり、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