私の好みは、UTC時間を使用して、サーバー側ですべての日付を格納することで、私はいくつかの構文解析を行うグローバルハンドラを作成するために、AJAX呼び出しを経由して戻ってくるデータを処理していたとき。
次の例では、あなたは、単に使用することができます:
app.ajax({
url: '/My/Post/Url',
data: {
MyProperty: 'MyValue'
},
success: function (data, status, xhr) {
// Do stuff here...
},
error: function (xhr, settings, error) {
// Do stuff here...
}
});
をしかし、それは任意のローカルタイムゾーンにUTC時刻の日付を固定することにより、「成功」機能の「データ」要素の値を返さ事前に解析します。これを実行した後、データをさらに処理する場合は、サーバーに戻す前にUNを修正する必要があります。そうしないと、オフセットでバックアップをポストすることになります。
var app = window.app = $.extend(true, {}, app, {
// Creating a namespace for my app which is safe across multiple files.
ajax: function (options) {
var defaultSettings = {
type: 'POST',
async: true
};
// Capture the settings.
var settings = $.extend(true, {}, defaultSettings, options);
// Install our general handlers;
if (settings.success) {
settings.success = function (data, textStatus, jqXHR) {
app.OnPostSuccess(data, textStatus, jqXHR, options.success);
}
} else
settings.success = app.OnPostSuccess;
if (settings.error) {
settings.error = function (jqXHR, ajaxSettings, thrownError) {
app.OnPostError(event, jqXHR, ajaxSettings, thrownError, options.error);
}
} else
settings.error = app.OnPostError;
$.ajax(settings);
},
OnPostSuccess: function (data, textStatus, jqXHR, fn_after) {
// Do my generalized success handling here.
// Fix Dates.
var fixedData = app.FixDate(data);
// Call any other handler that's been specified.
if (typeof fn_after === 'function')
fn_after(fixedData, textStatus, jqXHR);
},
OnPostError: function (jqXHR, ajaxSettings, thrownError, fn_after) {
// Do my generalized error handling here.
// Call any other handler that's been specified.
if (typeof fn_after === 'function')
fn_after(jqXHR, ajaxSettings, thrownError);
},
FixDate: function (obj) {
var fixed = obj;
if (typeof obj == 'string' && obj.indexOf('\/Date(') == 0) {
// Microsoft date "/Date(12345678)/" - convert to real date.
fixed = new Date(parseInt(fixed.substr(6, fixed.length - 8), 10));
}
if (typeof fixed === 'object') {
if (fixed.getTimezoneOffset) {
// If the value is a date, apply timezone correction.
var now = new Date();
var offset = now.getTimezoneOffset(); // # of minutes from GMT.
fixed = new Date(fixed.getTime() + offset * 60000);
// This updates the value based on the offset.
} else {
// Otherwise, update each of its properties.
// This fixes objects with dates for properties, recursively.
$.each(fixed, function (index, value) {
fixed[index] = app.FixDate(value);
});
}
}
return fixed;
}
});
これがすべてこれに設定されています。 OnPostSuccess内の日付などのようなものを処理する場合、それらが常に適切な形式で、常に適切なタイムゾーンにあることを確認できます。
次のようにあなたがAJAX上記メソッドを使用するかどうかにかかわらず、あなたがFixDateメソッドを使用することができます。
:
var MyObj = {
MyDate: "\/Date(12345678)\/"
};
console.log('Before: ', MyObj.MyDate);
MyObj = app.FixDate(MyObj);
console.log('After: ', MyObj.MyDate);
をアクションに例を参照するには、次のjsFiddleをチェックアウトし、
http://jsfiddle.net/TroyAlford/TBNVV/
注:これにはAJAXビットも含まれていますが、例では使用されていませんが、完全性のためにそこにのみあります。
回答ありがとうございますが、最適ではないようです – marcgg
こちらの投稿者は、https://bitbucket.org/pellepim/jstimezonedetectを代わりに使用することをお勧めします – Denis