0

登録ページに、ログイン時にタイムゾーン オフセットを取得し、次のようなデータベースのタイムゾーン オフセット変数に設定する JavaScript コードがあります"-06:00,1"。サマータイムを実施する場合は 1 が設定されます。

私のデータベースは英国時間または GMT +0:00 に設定されており、データベースから時間を取得し、ユーザーのタイムゾーン オフセットを使用して、ユーザーの現在地の正しいタイムゾーンを取得する必要があります。

私はもう試した:

$timeSent = date('H:i:s', strtotime($servertime)+($tzoneOffset)

上記のコードは機能しますが、タイムゾーンが などの正のオフセットである場合のみです06:00。どうすればこれを修正できますか?

4

3 に答える 3

0

そのように保管しないでください。DST には、有効化/無効化だけではありません。

PHP は IANA タイムゾーンを完全にサポートしています。代わりにそれらを使用してください。

たとえば、Europe/Londonまたはを使用しますAmerica/Los_Angeles

DST が有効/無効であるとだけ言うことはできません。なぜなら、DST が有効になる時期と、それらがどれだけオフセットされるかについて、非常に多くのタイム ゾーンで異なるルールがあるからです。世界的な標準はありません。

他にも、次の点に注意する必要があります。

  • 英国は常に GMT +0:00 であるとは限りません。夏には、英国夏時間 (BST) が有効になり、+1:00 になります。データベース サーバーを UTC に設定する方が適切です。これは基本的に GMT と同じであり、オフセットを変更することはありません。

  • JavaScript を介してユーザーからタイム ゾーン オフセットを収集しているとします。これは可能ですが、良い習慣ではありません。これを行うと、現在適用されているオフセットのみがキャプチャされます。代わりに、ドロップダウン リストからタイム ゾーンを選択するか、このような地図ベースのタイム ゾーン ピッカーを使用して、ユーザーにタイム ゾーンを選択させることを検討してください。jsTimeZoneDetectを使用してリストのデフォルト値を推測することを検討することもできますが、それだけに依存しないでください。ユーザーはそれを変更できる必要があります。

  • DST が必要かどうかをユーザーに決して尋ねないでください。ほとんどのエンド ユーザーは、自分のタイム ゾーンの規則について無知です。DST の問題は PHP に処理させます。

タイム ゾーン タグ wikiをまだ確認していない場合は、確認してください。そこにはたくさんの良い情報があります。

于 2013-07-13T04:12:31.697 に答える
0

データベース時間が UNIX タイムスタンプ値である (またはそうである可能性がある) と仮定すると、次のような関数を使用してオフセットを分離し、秒 (+ または -) を dbtime に追加できます。

function adjustTime($dbtime, $offset) {
    $hm = explode(":", $offset);
    $dl = explode(",", $hm[1]);

    $newtime = $dbtime + (intval($hm[0])*3600) + ($dl[1]*3600);

    return $newtime;
}

また、適用されていない場合、夏時間の値はゼロになると想定されています。

于 2013-07-13T04:17:40.690 に答える
0

単純な if-then でこの問題を解決できます。

if UserTimeZone < 0
    userTime = serverTime - UserTimeZone

else 
    userTime = serverTime + UserTimeZone
于 2013-07-13T03:53:59.127 に答える