Tôi biết điều này là hơi muộn, nhưng đây là giải pháp tôi đã nghĩ ra để xử lý ngày tháng khi bạn muốn độc lập về múi giờ. Về cơ bản, nó liên quan đến việc chuyển đổi mọi thứ sang UTC.
Từ Javascript đến Máy chủ :
Gửi các ngày dưới dạng giá trị kỷ nguyên với độ lệch múi giờ bị xóa.
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) }
});
Sau đó, máy chủ nhận 1420070400000 là kỷ nguyên ngày.
Ở phía Máy chủ, chuyển đổi giá trị kỷ nguyên đó thành một đối tượng datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
Tại thời điểm này, ngày chỉ là ngày / giờ do người dùng cung cấp khi họ cung cấp. Thực tế nó là UTC.
Đi theo hướng khác :
Khi máy chủ lấy dữ liệu từ cơ sở dữ liệu, có lẽ là ở UTC, hãy nhận sự khác biệt dưới dạng kỷ nguyên (đảm bảo rằng cả hai đối tượng ngày đều là cục bộ hoặc UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
hoặc là
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Khi javascript nhận được giá trị này, hãy tạo một đối tượng ngày tháng mới. Tuy nhiên, đối tượng ngày này sẽ được giả định là giờ địa phương, vì vậy bạn cần bù đắp nó bằng múi giờ hiện tại:
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)
Theo như tôi biết, điều này sẽ hoạt động cho bất kỳ múi giờ nào mà bạn cần hiển thị ngày tháng độc lập với múi giờ.