나는 이것이 조금 늦었다는 것을 알고 있지만 여기에 시간대에 독립적이기를 원할 때 날짜를 처리하기 위해 생각해 낸 해결책이 있습니다. 기본적으로 모든 것을 UTC로 변환하는 작업이 포함됩니다.
자바 스크립트에서 서버로 :
시간대 오프셋이 제거 된 epoch 값으로 날짜를 보냅니다.
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) }
});
그런 다음 서버는 날짜 epoch로 1420070400000을 수신합니다.
서버 측에서 해당 epoch 값을 datetime 객체로 변환합니다.
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
이 시점에서 날짜는 사용자가 제공 한 날짜 / 시간입니다. 사실상 UTC입니다.
다른 길로 가기 :
서버가 데이터베이스에서 데이터를 가져올 때 (아마도 UTC로) 차이를 epoch로 가져옵니다 (두 날짜 개체가 모두 로컬 또는 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;
자바 스크립트가이 값을 받으면 새 날짜 개체를 만듭니다. 그러나이 날짜 객체는 현지 시간으로 간주되므로 현재 시간대로 오프셋해야합니다.
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)
내가 아는 한, 이것은 시간대에 독립적 인 날짜를 표시해야하는 모든 시간대에서 작동합니다.