3

私は、javascript datepickerを使用して表示し、ユーザーが部屋の予約に利用可能なスケジュール日のカレンダーから日付を選択できるようにするという一般的な問題に遭遇しています。

ブラウザのタイムゾーン変換は、これらの日付が常にある程度ずれていることを意味します。そのため、ユーザーに予約日を表示するときに、サーバー(アセットにローカルなタイムゾーンまたはDBに保存されている部屋)はそれらを「今日」として表示します。

ユーザーのブラウザでJavaScriptの日付変換を無視し、データベースから渡された実際の日時のみを使用するようにしたいと思います。

ただし、これは次のような非常に単純な例でも発生します。

var date = '2013-02-05';

var newdate = new Date(date);

console.log(newdate); // Mon Feb 04 2013 16:00:00 GMT-0800 (PST) 

変数はdateブラウザによってGMTであると想定されているようで、それからjavascript dateオブジェクトを作成すると、そのGMT時刻が現地時間に変換されます。

この場合のベストプラクティスは、データベースでGMT日付を使用し、サイトの現地時間オフセットをjavascriptの変数として設定します。これを使用して、エンドユーザーに表示される日付をオフセットし、受信した日付を再度オフセットすることができます。データベースに挿入するためのエンドユーザーから?

潜在的な落とし穴が非常に多いため、これは混乱を招きます。PHPロケール、mysqlロケール、またはブラウザのロケールはすべてそれを考慮に入れて、最終日を台無しにする可能性があります。一貫した日付値を確保するためのアドバイスをいただければ幸いです。

4

1 に答える 1

1

良い質問です。タイムゾーンの処理は面倒です。幸いなことに、Javascript にはほとんどのメソッドの UTC バリアントがあります。http://en.wikipedia.org/wiki/Coordinated_Universal_Timeを参照

どこでも UTC 日付を使用するのが最善だと思います (UI を除く)。サーバーが UTC 日付を使用および保存していることを確認し、どこでも JavaScript UTC メソッドを使用してください。これが最初で最も重要なステップなので、日付が一貫していることがわかります。

UI で日付を表示する方法はそれほど単純ではなく、ターゲット ユーザーやアプリケーションの性質などに依存します。これは議論の対象であり、スタック オーバーフローでは答えられないと思います (主観的な熟考のためのフォーラムは他にもあります)。

タイムゾーンを自動変換するためにブラウザやあらゆる種類の地理位置情報を信頼しないでください。ユーザーが構成可能にするか、グループ/プロジェクト/インストール固有の設定にする必要があります。一部のソフトウェアは、主に 1 つのタイムゾーン内で使用されます。タイムゾーンを自動的に変換しようとすると、「標準」時間での通信に使用されている場合、ユーザーが混乱し、煩わしい場合があります。ユーザーが旅行している場合、別のタイムゾーンの時間を表示する必要がありますか? 理にかなっている場合もあれば、そうでない場合もありますが、少なくとも、時間の読み取りと入力の両方で、ユーザーがどのロジックに従っているかを確認してください。

私はプロジェクト管理ソフトウェアを開発していますが、これらがアプリケーションとユーザー (!) によって明確に処理されることが重要です。私のアプローチは、表示と入力の両方で常に UTC を強制することです。また、各日付が UTC であることもはっきりとわかります。さまざまなタイムゾーンを扱うとすぐに大変なことになるので、そうしないほうがよいと判断しました。UI の一部に、ユーザーのローカル タイムゾーンなどに同じ情報を細字で表示するヘルパーがいくつかあります。「すべてのタイムゾーン関連のものを非表示にし、タイムゾーン x を強制する」というプロジェクト全体の設定があり、タイムゾーンの境界を決して越えないことが知られている小規模なプロジェクトで使用できます。特定のゾーンを使用する合意があるか、または単に当然のことであり、そのような複雑さでユーザーを悩ませない方がよいでしょう。

編集: 例として、これがどれほど毛むくじゃらになるかを追加する必要があります。時間は時間にすぎない場合があります。コンテキストによっては、15:00 のイベントは、それぞれのローカル タイムゾーンで、さまざまな場所で 15:00 に発生することを意味する場合があります。うーん....

于 2013-02-06T00:22:01.620 に答える