0

codeigniter のマルチ タイムゾーン Web サイトについてサポートが必要です。

config.php:

$config['time_reference'] = 'gmt';
date_default_timezone_set('UTC');

ユーザーがイベントを見たい場合(ウェブサイトはイベント用です)、gmt_to_local()関数を使用して自分のタイムゾーンの日付を表示します。これは正常に機能します..

ここでの問題は、ユーザーが新しいイベントを追加したいときに、日付と時刻を選択すると、タイムスタンプに変換されることです:

strtotime($event_date);

そして問題は、彼が自分のタイムゾーンでイベントの日付と時刻を選択することです.今、私はそれをgmtに変換し、dbに保存する必要があります.

たとえば、ユーザーが UP2(+2:00)にいて、2012 年12 月 25 日 22:30:00を設定した場合、タイムスタンプに変換されてデータベースに保存されますが、これは正しくありません。2:00 を引いて保存する必要があります。そのタイムスタンプを2012 年 12 月 25 日 20:30:00のタイムスタンプとして db に(これは gmt に変換されます)

ご理解いただければ幸いです。

これに対する解決策はありますか?ありがとう。

4

1 に答える 1

2

イベント フォームで、クライアントのタイムゾーン オフセットを含む非表示の入力ウィッチをサーバーに送信する必要があります。Javascript の Date.getTimezoneOffset() メソッドを介して取得できます (UTC とユーザーの現地時間の間の分単位のオフセットが得られます)。

それができない場合は、ユーザーのローカル タイムゾーンを db に保存するか、イベント フォームで尋ねることができます。

次に、INSERT または UPDATE クエリで、DATE_ADD('2012-12-13 19:41:00', [user offset] MINUTE) を使用してタイムスタンプを変換できます。フォームを送信するときに、php、またはクライアント側で行うこともできます...

たとえば、PHP の場合:

strtotime($event_date);

日付の Unix タイムスタンプ (つまり、秒単位) を提供します。別のタイムゾーンに変換するには、javascript メソッドでオフセットを分単位で取得すると、次のことができます。

$dbTimestamp = strtotime($event_date) + $_POST['offsetInMinutes']/60;

'+2:00' または '-6:00' の形式でオフセットを取得する場合、正規表現を使用してオフセットを時間単位で取得できます。

preg_match('/(.*)\:00/', '+2:00', $match)

'+2' を $match[1] に設定します

于 2012-12-13T18:39:15.517 に答える