Я знаю, что это немного поздно, но вот решение, которое мне пришлось придумать для обработки дат, когда вы хотите быть независимым от часового пояса. По сути, это включает в себя преобразование всего в 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:
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)
Насколько мне известно, это должно работать для любого часового пояса, где вам нужно отображать даты, не зависящие от часового пояса.