0

ユーザーに予約の日時を入力して、その1時間前にリマインダーを送信してもらいたい。

サーバーでは日時をUTCで保存したいのですが、クライアントではユーザーが現地時間で入力します。この変換に対処するための最良の方法は何ですか?これをネイティブにサポートするプラグインはありますか?

4

2 に答える 2

2

はい、システム情報(jsTimezoneDetect)に従ってタイムゾーンを検出するプラグインがあります。実際には、dateオブジェクト自体が情報を格納します(ただし、これはちょっと奇妙です!)。

SOには興味深い記事興味深い答えがあります。これは一読の価値があります。

javascriptで日時の計算を行わないでください。ブラウザのタイムゾーンを推測して定義することもできますが、定義自体とすべての日時の計算は、タイムゾーンに対応したシステムで行う必要があります。

この記事を読むと、「javascriptのdate / dst / utc / timezones」の問題をより深く理解できるようになります。したがって、サーバー側について詳しく教えていただければ興味深いと思います。

  • サーバー側でどのフレームワークを使用していますか?
  • 一部の設定(カスタムタイムゾーン設定など)でアカウントを再プリセットするためのロジックはありますか?

「正しい」アプローチ(バックエンドが背後にある場合はフェイルセーフ)は次のようになります。ユーザーが日時を操作できるようにします。ブラウザスコープでは、多かれ少なかれ「未定義」です(タイムゾーンを見つける必要はありません。オフセット、または同様のもの!)。ここで、この「未定義」の日時情報をサーバーに提供します(たとえば、隠しフィールドを含むunix-timestampをサーバーに送信します)。ここには、ユーザーが割り当てられている実際のタイムゾーンに関する情報があります。したがって、この「未定義」の日時情報をサーバー側のタイムゾーン対応の日時オブジェクトに変換し、アカウントスコープの情報をそれに割り当てることができます(「未定義」の日時オブジェクトには現地時間があります)。 -ゾーン-例:「太平洋夏時間」)。これで、必要な変換を簡単に行うことができます。
このアプローチの唯一の欠点は、タイムゾーン(ユーザーとWebアプリのOS)を定義する2つのスコープがあることですが、それ以外のものは手間がかかり、フェイルセーフではありません!

于 2012-05-07T05:08:58.947 に答える
0

getTimezoneOffsetUTC日付/時刻クライアント側を計算する方法を使用して、タイムスタンプをサーバーに送信することをお勧めします。タイムスタンプを送信するクライアント側に戻すには、ダミーの日付クライアント側を作成して現在のタイムゾーンオフセットを決定し(ユーザーが別のタイムゾーンに移動した可能性があります!)、その情報からクライアント側の日付を作成します。クライアント側では、次のようなことを行います。

//[client side send]
var d = new Date(), //now
    offset = d.getTimezoneOffset()
    UTCTimeStamp = d.getTime()+(60000*offset); // send to server

//[client side receive]
var offset = 60000*new Date().getTimezoneOffset(),
    localDate = new Date(timestamp + (offset < 0 ? Math.abs(offset) : -offset));

このアイデアを使用して簡単なテストを行うには、ここをクリックしてください。

于 2012-05-07T05:18:25.153 に答える