Saya tahu ini agak terlambat, tetapi inilah solusi yang harus saya pikirkan untuk menangani tanggal ketika Anda ingin menjadi independen zona waktu. Pada dasarnya ini melibatkan mengubah segalanya menjadi UTC.
Dari Javascript ke Server :
Kirimkan tanggal sebagai nilai waktu dengan offset zona waktu dihapus.
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) }
});
Server kemudian menerima 1420070400000 sebagai periode tanggal.
Di sisi Server, konversikan nilai epoch tersebut menjadi objek datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
Pada titik ini, tanggal hanyalah tanggal / waktu yang disediakan oleh pengguna seperti yang mereka berikan. Secara efektif ini adalah UTC.
Pergi ke arah lain :
Saat server menarik data dari database, mungkin dalam UTC, dapatkan perbedaannya sebagai epoch (pastikan bahwa kedua objek tanggal adalah lokal atau UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
atau
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Saat javascript menerima nilai ini, buat objek tanggal baru. Namun, objek tanggal ini akan diasumsikan sebagai waktu lokal, jadi Anda perlu mengimbanginya dengan zona waktu saat ini:
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)
Sejauh yang saya tahu, ini harus berfungsi untuk zona waktu mana pun di mana Anda perlu menampilkan tanggal yang tidak bergantung pada zona waktu.