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タイムゾーンを取得します。
私はこれを解決しようとしています:
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のタイムゾーンは変わりません。
MySQLコンソールから行うことなく、PHPと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の記事 です。
次の2行のPHPを使用するだけで簡単に実行できます。
$tz = (new DateTime('now', new DateTimeZone('Asia/Kabul')))->format('P');
$pdo->exec("SET time_zone='$tz';");
Phpmyadminの「タイムゾーン」という行を編集することで、mysqlのデフォルトタイムゾーンを可変セクションから変更できます。
ここでは、フォーマットを変更したり、mysqlサポートで見つけることができる多くのこともできます http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html 、私は願っていますその助け。
Phpとmysqlの両方に同じタイムゾーンを配置できます。
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;
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')."'"]);