PHP と MySQL でのタイムゾーンの同期
PHP date() 関数を使用して MySQL に日付を保存する必要があるアプリケーションを開発しています。 NOW() を使用して MySQL 内でこれらの日付を比較し、時差を計算する必要があります。ただし、PHP date() 関数は PHP で定義されたタイムゾーンを使用するのに対し、NOW() は MySQL サーバーで構成されたタイムゾーンを使用します。
この問題を解決するために、次のようなさまざまなアプローチを試みました。
最終的に、MySQL タイムゾーンは変更されません。
解決策
手動のコンソール コマンドや php.ini の変更を行わずに、PHP と MySQL のタイムゾーンを同期します:
PHP:
<code class="php">define('TIMEZONE', 'Europe/Paris'); date_default_timezone_set(TIMEZONE);</code>
MySQL:
<code class="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); // Assuming an existing DB connection named $db $db->exec("SET time_zone='$offset';");</code>
このアプローチにより、PHP と MySQL の両方が同じタイムゾーンを使用するようになり、日付の保存と比較における不一致が排除されます。さらに、手動でタイムゾーンを設定したり、グローバル構成ファイルを変更したりする必要がなくなります。
以上がPHP と MySQL でタイムゾーンを同期するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。