Я знаю, що це трохи пізно, але ось рішення, яке мені довелося придумати для обробки дат, коли ви хочете бути незалежними від часового поясу. По суті це включає перетворення всього в UTC.
Від Javascript до сервера :
Дати надсилайте як епохальні значення з видаленням зміщення часового поясу.
var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
url: '/target',
params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});
Потім сервер отримує 1420070400000 як епоху дати.
На стороні Сервера перетворіть це значення епохи в об'єкт дати:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
На даний момент дата - це саме дата / час, наданий користувачем у той час, як вони його надали. Ефективно це UTC.
Іншим шляхом :
Коли сервер витягує дані з бази даних, імовірно, в UTC, отримайте різницю як епоху (переконайтесь, що обидва об'єкти дати або локальні, або UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
або
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Коли javascript отримає це значення, створіть новий об’єкт дати. Однак цей об'єкт дати вважатиметься місцевим часом, тому вам потрібно компенсувати його поточним часовим поясом:
var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))
console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)
Наскільки мені відомо, це має працювати в будь-якому часовому поясі, де потрібно відображати дати, незалежні від часового поясу.