JsonValueProviderFactory を使用して、webapi から JSON を返しています。ajax リクエストを行うと、JSON が返され、日付の JSON 表現を JavaScript の Date オブジェクトに変換しています。
data.StartDateTime = new Date(data.StartDateTime);
data.StartDateTime JSON は "2012-12-19T10:00:00" のようになり、FireFox に対するテストではかなりうまく機能しています。Chrome に対してテストすると、日付の処理が異なります。
各ブラウザをテストしました: new Date("2012-12-19T10:00:00")
FF: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
IE: Date {Wed Dec 19 2012 03:00:00 GMT-0700 (Mountain Standard Time)}
Chrome: Date {Wed Dec 19 2012 03:00:00 GMT-0700 (Mountain Standard Time)}
Safari: Invalid Date
したがって、webkit はタイムゾーンを含める必要があるようです。ユーザーのタイムゾーン オフセットを計算し、それを JSON 日付値に追加すると、次のようになります。
新しい日付("2012-12-19T10:00:00-07:00")
FF: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
IE: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
Chrome: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
Safari: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
したがって、これらの調査結果に基づいて、JSON 日付表現にタイムゾーン オフセットを追加するだけで問題ないように思われます。これらの日付/時間は、実店舗での予定をスケジュールするためのものであるため、UTC 日付ではないことに注意してください。
JSON 日付値に追加するオフセットを取得するために、このメソッドを作成しました。
_calculateTimezoneOffset: function() {
var offset = new Date().getTimezoneOffset(),
hour = parseInt(offset / 60, 10),
minutes = offset % 60,
prefix = '-';
if (offset > 0) {
prefix = '-';
} else {
prefix = '+';
hour *= -1;
}
if (hour < 10) {
hour = prefix + '0' + hour;
} else {
hour = prefix + hour;
}
if (minutes < 0) {
minutes *= -1;
}
if (minutes < 10) {
minutes = '00';
}
return hour + ':' + minutes;
}
これを処理するより良い方法はありますか?すべてを再考した後、これを避けるために日付を UTC に変換し始めるかもしれません。いずれにしても問題について何か考えはありますか?
事前にご協力いただきありがとうございます。