0

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を与えます。どこが間違っているのですか?

4

3 に答える 3

1

コードでは、dtはUTC時間です。UTCから現地時間に変換する必要があります。Javascript:UTC Date()オブジェクトをローカルタイムゾーンに変換する
を参照してください。

于 2012-04-24T03:50:39.533 に答える
0

適切な値で.NETDateTimeオブジェクトを作成していますか?DateTimeKindサーバーにUTC相対値を送信していますが、これは、UTC相対時間ではなく、EDT相対時間として値を格納しているため、値が正しくないことを推測しています。あなたが述べたように、1332518400000UTCではなく12PM EDTであり、これはサーバー上の文字起こしの問題を示しています。

> new Date(1332518400000)
Fri Mar 23 2012 12:00:00 GMT-0400 (Eastern Daylight Time)
于 2012-04-23T16:02:51.060 に答える
0

この機能は私にとって美しく機能します。

function ParseDateForSave(dateValue) {
    // create a new date object
    var newDate = new Date(parseInt(dateValue.substr(6)));

    // return the UTC version of the date
    return newDate.toISOString();
}
于 2014-04-08T17:56:40.547 に答える