ホームページ >データベース >mysql チュートリアル >サーバー構成を変更せずに、Web アプリケーション内で PHP と MySQL のタイムゾーンを同期するにはどうすればよいですか?
PHP と MySQL でのタイムゾーンの同期
Web アプリケーションでは、異なるタイムゾーンにわたる日時値を正確に処理することが重要です。ただし、PHP と MySQL のデフォルトのタイムゾーン設定は異なる可能性があり、日付の計算に不一致が生じる可能性があります。この記事では、PHP と MySQL の両方でタイムゾーンを設定する際の課題を検討し、サーバー構成を変更することなく包括的なソリューションを提供します。
ジレンマ: 異なるタイムゾーン
PHP の日付を使用する場合date('Y-m-d H:i:s') などの () 関数では、PHP のタイムゾーン設定が適用されます。逆に、MySQL の NOW() 関数は MySQL サーバーのタイムゾーン設定を使用します。この不一致により、日付の比較と計算が正しく行われない可能性があります。
失敗した試行
開発者は、これまでに次のようなさまざまな方法でタイムゾーンを変更しようとしました。
解決策: 同期
アプリケーション内で PHP と MySQL のタイムゾーンを同期するには、次のアプローチをお勧めします。
1. PHP タイムゾーン設定
<code class="php">define('TIMEZONE', 'Europe/Paris'); date_default_timezone_set(TIMEZONE);</code>
定数 TIMEZONE を定義し、それを使用して PHP のデフォルトのタイムゾーンを設定します。
2. 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);
サーバー時間と目的のタイムゾーンの間のオフセットを計算します。
3. MySQL タイムゾーンの設定
<code class="php">// Your DB Connection - sample $db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword'); $db->exec("SET time_zone='$offset';");</code>
クエリを実行して、計算されたオフセットに MySQL タイムゾーンを設定します。
このソリューションを実装すると、アプリケーション内の PHP と MySQL のタイムゾーンが同期されます。サーバー構成に関係なく、正確な日時の計算と比較が保証されます。
以上がサーバー構成を変更せずに、Web アプリケーション内で PHP と MySQL のタイムゾーンを同期するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。