4

次のように、APIにasp.net UTCタイムスタンプを送信しようとしています:

d = new Date()
test = moment(d).utc().valueOf()
test2 = moment(d).utc().format("ZZ")
utc_asp = "/Date("+test+test2+")/"
console.log utc_asp
>> /Date(1372670700799+0000)/ 

しかし、サーバーが取得する時刻は現地時間と同じですか?

またはこれ:

console.log moment(d)
console.log moment(d).utc()

D {_i: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST), _f: undefined, _l: undefined, _isUTC: false, _d: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST)…}
 index.js:39
D {_i: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST), _f: undefined, _l: undefined, _isUTC: true, _d: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST)…}

これを行う:

console.log moment(now).utc().hour()
>> 9 - This is correct! Its 11 - 2, but how come the above

私はそれを間違っていますか?

4

2 に答える 2

2

現在の日付から瞬間を作成するには、moment()パラメーターなしで使用します。

var m = moment();  // returns a moment representing "now"

その後、MS 独自の/Date()/形式でフォーマットする場合は、次を使用できます。

m.format("/[Date](XSSS)/")

/Date(1372728650261)/これにより、 which が .Net に渡すのに適しているなどの値が得られ、最終的にisのDateTimeオブジェクトが得られます。.KindUtc

オフセット付きの拡張フォーマットが必要な場合は、これを使用できます。

m.format("/[Date](XSSSZZ)/")

などの値が返され/Date(1372728650261-0700)/ます。DataContractJsonSerializerこれは、.Netのクラスの要件に一致します。これらのドキュメントの「DateTime Wire Format」というタイトルのセクションを参照してください。

ただし、この後者の形式は使用しないことを強くお勧めします。によってのみ認識されDataContractJsonSerializer、ドキュメントでは、指定したオフセットは無視されると明示的に述べられています-代わりにサーバー独自のオフセットを使用します。それはかなりばかげていますが、それはそれがすることです。クラスを使用している場合JavaScriptSerializer、オフセットも無視されますが、DCJS とは動作が異なります (ローカルに移動する代わりに UTC を使用します)。

さらに言えば、この奇妙な形式を完全に放棄することをお勧めします。代わりに ISO8601 標準を使用してください (例、2013-07-01T18:38:29-07:00)。これは momentjs で簡単に実行でき、デフォルトの形式です。

moment().format() // it's the default, no need to specify anything.

サーバー側では、デフォルトでこの形式も使用するJSON.Netを使用します。実際にオフセットを気にする場合は、DateTimeOffsetタイプの代わりにサーバー上のタイプを使用してDateTimeください。

于 2013-07-02T01:52:34.293 に答える