ホームページ >データベース >mysql チュートリアル >サーバー構成を変更せずに、Web アプリケーション内で PHP と MySQL のタイムゾーンを同期するにはどうすればよいですか?

サーバー構成を変更せずに、Web アプリケーション内で PHP と MySQL のタイムゾーンを同期するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 20:07:30515ブラウズ

How can I synchronize PHP's and MySQL's timezones within my web application without modifying server configurations?

PHP と MySQL でのタイムゾーンの同期

Web アプリケーションでは、異なるタイムゾーンにわたる日時値を正確に処理することが重要です。ただし、PHP と MySQL のデフォルトのタイムゾーン設定は異なる可能性があり、日付の計算に不一致が生じる可能性があります。この記事では、PHP と MySQL の両方でタイムゾーンを設定する際の課題を検討し、サーバー構成を変更することなく包括的なソリューションを提供します。

ジレンマ: 異なるタイムゾーン

PHP の日付を使用する場合date('Y-m-d H:i:s') などの () 関数では、PHP のタイムゾーン設定が適用されます。逆に、MySQL の NOW() 関数は MySQL サーバーのタイムゾーン設定を使用します。この不一致により、日付の比較と計算が正しく行われない可能性があります。

失敗した試行

開発者は、これまでに次のようなさまざまな方法でタイムゾーンを変更しようとしました。

  • date_default_timezone_set('Europe/Paris') の使用は PHP にのみ影響します。
  • PHP 経由での date.timezone の設定は MySQL には影響しません。
  • SELECT CONVERT_TZ(now(), 'GMT) の使用'、'MET') は空の結果を返します。
  • MySQL コンソールでの SET time_zone = 'Europe/Paris' の発行は失敗します。

解決策: 同期

アプリケーション内で 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。