Meine Präferenz ist es, alle Termine auf der Serverseite zu speichern UTC-Zeit verwendet wird, und wenn ich Daten am Umgang via AJAX aufruft, kommen wieder einen globalen Handler zu schaffen, die eine Analyse des Fall ist.
Im folgende Beispiel kann Sie einfach verwenden:
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...
}
});
Aber es vorge parst alle zurückgegebenen Werte in der „Erfolg“ „data“ Element Funktion von Daten für die UTC-Zeit auf der Lokalzeit zu fixieren. Beachten Sie, dass Sie die Daten anschließend weiter verarbeiten müssen, bevor Sie sie an den Server zurücksenden, oder Sie werden sie mit dem Offset sichern.
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;
}
});
All diese Einstellungen, um dies zu erreichen. Wenn Sie jetzt Dinge wie Daten in OnPostSuccess behandeln, können Sie sicherstellen, dass sie immer im richtigen Format sind - und immer in der richtigen Zeitzone.
Unabhängig davon, ob Sie die oben genannten AJAX Methoden verwenden, können Sie die fixdate Methode wie folgt:
var MyObj = {
MyDate: "\/Date(12345678)\/"
};
console.log('Before: ', MyObj.MyDate);
MyObj = app.FixDate(MyObj);
console.log('After: ', MyObj.MyDate);
das Beispiel in Aktion sehen, die die folgenden jsFiddle:
http://jsfiddle.net/TroyAlford/TBNVV/
Hinweis: Dazu gehören auch die AJAX-Bits - diese werden aber im Beispiel nicht verwendet - nur dort der Vollständigkeit halber.
Danke für die Antwort, aber es scheint nicht optimal – marcgg
FYI, der Autor des Beitrags empfiehlt stattdessen https://bitbucket.org/pellepim/jstimezonedetect zu verwenden – Denis