0

私は英国に拠点を置いていますが、私のサイトはアメリカのサーバーで実行されています。データベースに入力される日付には、サーバー時刻が反映されるものと、英国時間が反映されるものがあります。私はこれがどのように起こるか混乱しています。

を使用して codeigniter index.php ファイルにタイムゾーンを設定しましたがdate_default_timezone_set('Europe/Dublin');、一部のコントローラーでは機能するようですが、他のコントローラーでは機能しないようです。

問題を探す場所に関する推奨事項。すべてのコントローラーのコンストラクターでタイムゾーン関数を使用する必要がありますか?

4

4 に答える 4

0

おそらく、時間を決定するために2つの異なる方法を使用しています。たぶん、それはクライアントサイドで決定される場合があります、あなたは別の方法でstrtotimeとdateを使用しました...

これに対処するために一般的に受け入れられている方法は、Unixタイムスタンプを入力するか、正しい時刻を決定する単一の方法を使用することです。次に、システムフォルダー内のコントローラーを混乱させる代わりに(アップグレードするたびに実行する必要があります)、アプリケーションのコアフォルダー内のMY_Controllerでコントローラーを拡張し、そこでタイムゾーンを定義/決定します-どちらかがおそらく実行します。

于 2012-10-23T09:17:54.720 に答える
0

あなたのコントローラーは同じ1つのコントローラーを拡張するかもしれませんCI_Controller
コンストラクターにコードを追加してみることができます。CI_Controlleはファイルです

System/core/Controller.php 
于 2012-10-23T09:08:33.263 に答える
0

これは、MySQL がサーバーのタイムゾーンを使用しており、おそらくタイムゾーンに設定されていないためだと思います。最善の解決策は、タイムゾーンに合わせてサーバーを構成することです。

しかし、私はかつてこれと同じ状況に直面し、サーバーを変更する余地がありませんでした (他のアメリカのサイトがありました)。そのため、リクエストごとに MySQL のタイムゾーンを設定する必要がありました。理想的ではないことはわかっていますが、機能します。

アプリに自動ロードされるライブラリがあり、そのクラスのコンストラクターに DB 呼び出しを配置し​​ます。構成ファイルにタイムゾーンを設定しています。

$CI = &get_instance();

// Let's set timezone in the DB
$timezone = new DateTimeZone($CI->config->item('app_timezone'));
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds
$gmt_offset = ($offset < 0 ? '-' : '+') . str_pad(floor($offset/3600), 2, '0') . ':' . str_pad(($offset % 3600)/60, 2, '0');

$CI->db->query("SET time_zone = '{$gmt_offset}'");
于 2012-10-23T09:37:32.877 に答える
-1

日付をデータベースに挿入する方法によって異なります。

strtotime または time を使用してタイムスタンプを整数としてデータベースに挿入することで、これを解決できます。ビューに日付を表​​示するときは、date または strftime で元に戻します

メインの index.php でタイムゾーンを設定するだけで十分です。

于 2012-10-23T09:10:15.560 に答える