ASP.NET MVCを使用しており、すべてのDateTime値をUTC形式でサーバーに保存したいと考えています。そして、DateTime値のすべての送信がUTC形式であることを望みます。しかし、ブラウザに現地時間で日時を表示したいのですが。私は混乱していて、それを機能させるのに苦労しています。以下は私のプロセスです...
私のUIでは、ユーザーは私が作成した日付を文字列に入力し、Dateオブジェクトの作成に使用できます。最終的には次のようになります。
var dt = new Date("3/23/2012 8:00 AM");
したがって、ユーザーは午前8時の日付を作成する予定です。これをUTC形式でサーバーに送信したいので、次の方法を使用します。
Date.prototype.toUTC = function ()
{
var self = this;
return new Date(self.getUTCFullYear(), self.getUTCMonth(), self.getUTCDate(), self.getUTCHours(), self.getUTCMinutes());
};
私はそのように使用します:
data.startDt = dt.toUTC(); //Data is the object being set to the server
次に、jQueryを使用してAjax呼び出しを行い、データオブジェクトをサーバーに送信します。サーバーでデバッグし、入ってくるデータを調べると、StartDt(.NET DateTimeオブジェクトにマップされている)が{3/23/201212:00:00PM}であることがわかります。
これは、データベースに保存する値です。しかし、それが正しいかどうかは完全にはわかりません。
クライアントとサーバーの両方が米国東部(UTC-05:00)にあります。
さて、この日付をJSON形式でクライアントに送り返すと、.NETはこれを送信します。
"/Date(1332518400000)/"
JavaScriptでは、次のように解析します。
var dt = new Date(parseInt(serverDt.substr(6))); //parseInt ingnores last /
私の考えでは、これはUTC日付ですが、以下に示すようdt
に呼び出すことで、ローカル形式で表示できます。toShortTime()
Date.prototype.get12Hour = function ()
{
var h = this.getHours();
if (h > 12) { h -= 12; }
if (h == 0) { h = 12; }
return h;
};
Date.prototype.getAMPM = function ()
{
return (this.getHours() < 12) ? "AM" : "PM";
};
Date.prototype.toShortTime = function ()
{
return this.get12Hour() + ":" + this.getMinutes() + " " + this.getAMPM();
};
しかし、それでは私が望む午前8時を返すことはできません。それは私に12:00PMを与えます。どこが間違っているのですか?