5

どのブラウザーでも同じ時間を使用して、国際的にサービスを予約するためのベスト プラクティス/ソリューションを探しています。論理がよくわかりません(そして、ここも掘り下げました)。

使用事例

  • ブリュッセルの予約をしているユーザーが、シンガポールを拠点とするヘアカット サービスを利用しているとします。彼は 1 週間後にシンガポールに飛びます。彼はブラウザの日時コントロールで 14:00 を選択します。ただし、ブラウザは +1 UTC に設定されています。
  • SG ヘアカット スタイリストは、アジェンダの時間を 14:00 SG 時間として表示する必要があります。
  • 理髪店のオーナーはドバイを旅行中で、ブラウザーが一時的に +4 UTC に設定されているにもかかわらず、議題を SG タイムゾーンのまま表示したいと考えています。

基本的に、すべての役割は、現在の TZ に関係なく「理髪店」の現地時間を確認し、「店」の時間にサーバーに報告する必要があります。

サーバー時間は UTC、タイムスタンプは UNIX 秒です。「ショップ」TZは知られています。

問題は、ブラウザの現地時間を内部的に利用するいくつかのjqueryプラグイン(datetimepickerとcalendar)を使用していることです。分析と修正が必要な数千行のコードがあり、サポートが少なくなります-(Bruxelles | any other TZ)のブラウザ各 "new Date()" は、ローカル ブラウザー時間を取得します。かなり狭い場所もあります (これらの架空の「理髪店」は世界中にあり、マップから選択されるため、ターゲット TZ は動的です)。

そのための一般的な慣行は何ですか?

しやすいですか

  • タイムゾーンを気にしない js で「動的な」基準日をモックし、プラグインにフィードする
  • クライアントへのロード時にサーバー データをローカル TZ に変換する
  • 他の解決策を適用する

どうもありがとう

PS私はベストプラクティスを読みました-しかし、私が言ったように、私は特定のプラグインを使用することに縛られています.

解決策:

異なる「理髪店」の本を時間的に比較する必要がないため、これらの日時の相対値は必要ないことに気付きました(各「店」の緯度/経度があれば、必要に応じて相対時間を再計算できます)。

基本的に、タイムゾーンに関係なく絶対UTC 値のみが必要です。この場合、UNIX 時間 (1970 UTC からの秒数) が完全に適合します。

クライアントでユーザーのブラウザー オフセットによって時刻を修正し、それをバックエンドに送信して、そこでターゲット オフセットで修正する代わりに、クライアント側とサーバー/データベース側の両方で、システム全体を明確な UTC 日付で実行し、保存および表示します。ローカル ブラウザのクロックにバインドされ、どこにも保存されない日付/時刻フィルタを除いて、すべてのロールに適用されます。

4

1 に答える 1

4

これにはいくつかの方法があります。

オプション1

  • UTC、ブラウザのタイム ゾーン、ターゲット タイム ゾーンのことは忘れてください。それらを未指定の日時として扱います。
  • サーバーとクライアントの間で、整数のティックまたは秒を渡さないでください。これらは UTC にバインドされています。代わりに、オフセットや「Z」なしで、ローカル日時を ISO8601 文字列として渡します。
  • moment.jsを使用して、ブラウザのオフセットを導入せずに文字列を解析およびフォーマットします。例えば:

    // to get a Date value suitable for use with an existing control or script.
    var date = moment('2013-04-19T14:00').toDate();
    
    // to get a string back from a Date that's ready to go to your server.
    var str = moment(date).format('YYYY-MM-DDTHH:mm');
    
  • サーバー側では、使用しているプラ​​ットフォームによって異なります。おそらく ISO8601 はすでにサポートされています。たとえば、.Net では単純に.ToString("o"). これについて具体的なアドバイスが必要な場合は、お使いのサーバー プラットフォーム/言語についてお知らせください。

オプション 2

  • ISO8601 とその「Z」指定子を使用して、サーバーとの間で UTC 日時を転送します。
  • 日付を操作するときはいつでも、ここにリストしたものの 1 つなどの TZDB JavaScript ライブラリを使用してください。UTC とターゲット タイム ゾーンとの間で変換します - ブラウザのタイム ゾーンを無視します。
  • これは問題なく機能し、特定されていない現地時間ではなく、特定の瞬間について話していることになりますただし、これらのライブラリは大量のデータを必要とするため、このような単純なタスクにはおそらくやり過ぎです。予約時間を他のタイム ゾーンに変換するなど、他に多くの変換を行う必要がない限り、これはお勧めしません。
于 2013-04-12T22:34:50.857 に答える