11

私は現在、自分のウェブサイトでタイムゾーンを処理する最良の方法を研究しています。さまざまな国の人が同時にアクセスするため、時間ベースの情報を表示する必要があるため、次のように考えました。

サーバーに従って毎回データベースに保存します (PHP で定義された同じタイムゾーン) 次に、ユーザーは自分のタイムゾーンを選択するオプションがあり、mysql 関数 DATEADD を使用して必要な変換を行います。

これはうまくいくようですが、私の質問は次のとおりです。

  • これが最善の方法ですか?
  • DATEADD は時差を処理す​​る最も効率的な関数ですか?

ありがとう。

4

3 に答える 3

7

MySQLサーバーのタイムゾーンサポートで説明されているように:

現在のセッションのタイムゾーン設定は、ゾーンに依存する時間値の表示と保存に影響します。NOW()これには、またはなどの関数によって表示されるCURTIME()値、および列に格納されている値と列から取得されている値が含まれTIMESTAMPます。列の値はTIMESTAMP、現在のタイムゾーンからUTCに変換されて保存され、UTCから現在のタイムゾーンに変換されて取得されます。

したがって、タイプ列を使用する場合TIMESTAMP、MySQLはタイムゾーン変換を自動的に処理します。セッションの適切なタイムゾーンをtime_zone変数に設定するだけです。

于 2012-08-31T03:51:20.870 に答える
2

あなたは正しい方向に考えています。

サーバーのタイムゾーンは使用しません。代わりに、協定世界時(UTC)時間を使用してください。それは世界の時間基準です。これは、グリニッジ標準時(GMT)とほとんど同じです。UTCは夏時間によって変更されないことに注意してください。

PHPで使用するには、http://php.net/manual/en/function.gmdate.phpを参照してください。

ここから、次の方法で時間を追加できます:http ://www.php.net/manual/en/datetime.add.php

または、ユーザーの設定に基づいてタイムゾーンを設定します:http ://www.php.net/manual/en/datetime.settimezone.php

使用するものは、ユーザーのタイムゾーンを取得する方法に基づいています。(最も正確に)要求した場合は、ユーザーがコンボボックスから選択してPHPでタイムゾーンを設定できます。を使用してJavaScriptを使用してヘッダーから取得する場合getTimezoneOffset();は、タイムゾーンオフセットに基づいて時間を追加するのが最適です。

于 2012-08-31T03:51:50.957 に答える
0

私は、GMT +0.00タイムゾーンに従って、DBに常に個人的に設定しました。したがって、たとえば現在の時刻を追加する場合は、 UTC_TIMESTAMP()(またはUTC_DATE()、 -どちらか該当する方)を使用します。UTC_TIME()これはサーバーに依存しないため、サーバーを変更しても、将来この問題について心配する必要はないと確信しています。

次に、訪問者が自分のタイムゾーンを選択する機会がある場合は、DATE_ADD()andDATE_SUB()関数を使用して、結果を提供する前に結果をフォーマットできます。

それ以外の場合は、機会があれば(これが私のお気に入りのソリューションです)、Javascriptを使用してその日付/時刻をフォーマットできます。これにより、次のような方法で簡単に処理できます。

function getLocalDate(dt) {
    var d = new Date(0);
    d.setUTCSeconds(dt);
    return d.toLocaleDateString();
    // or in some format that you choose
}

これは、。を使用してPHPによってエコーされた日付を取得しますstrtotime($row['some_date']);

于 2012-08-31T03:52:55.203 に答える