私はこれが少し遅れていることを知っていますが、タイムゾーンに依存しないようにしたいときに日付を処理するために私が考えなければならなかった解決策があります。基本的に、すべてを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)
私の知る限り、これはタイムゾーンに依存しない日付を表示する必要があるすべてのタイムゾーンで機能するはずです。