OData Restサービスの場合、Moment.jsを使用してUnixタイムスタンプから日付を作成しますが、タイムゾーンを無視したいと思います。私の日付は「2013-12-24」で、Unix秒で1387839600です。
使用する
moment("2013-12-24", "YYYY-MM-DD").toISOString()
私はGMT + 1に住んでいるので、結果は「2013-12-23T23:00:00.000Z」になります。の使用によって
moment.utc("2013-12-24", "YYYY-MM-DD").toISOString()
「2013-12-24T00:00:00.000Z」が表示されます。これはまさに私が欲しいものです。最後にZulu時間の「Z」を簡単に削除できます。
しかし、私の日付の実際の表現はUnixタイムスタンプです。だから私がそうするなら
moment.utc(1387839600, "X").toISOString()
常に「2013-12-23T23:00:00.000Z」を取得しますが、「2013-12-24T00:00:00.000Z」を返します。
私のせいはどこですか?ご協力いただきありがとうございます!
Unixタイムスタンプは、秒単位かミリ秒単位かに関係なく、UTCでは常にです。値1387839600
は確かに2013-12-23の11:00 PM UTCです。確認には このようなサイト を使用します。
UTCの深夜に2013-12-24にする場合、タイムスタンプは1387843200
になります。
したがって、瞬間は正しく動作しています。代わりに、REST APIに焦点を合わせ、現地時間の値ではなくUTCを正しく出力していることを確認する必要があります。
また、日付部分だけが必要な場合は、.toISOString
を使用しないでください。代わりに、次のような.format
を使用してください。
moment.utc(1387843200, 'X').format('YYYY-MM-DD')
独自のフォーマットを「作成」することができます。そのままコピーする必要がある(補間されない)文字列は、角かっこで囲む必要があります。
したがって、あなたの状況では、これはうまくいくはずです:
moment(1387839600, 'X').format('YYYY-MM-DD[T00:00:00.000]')
OnChange機能を調整した後、
_<DateTimeField mode="date" inputFormat='MM-DD-YYYY' onChange= {this.onChange} />
_
OnChange関数は次のようになります。
onChange: function(value) { console.log({myDate: moment.utc(value, 'x').format('YYYY-MM-DDTHH:mm:ss.SSSZ')}); },
混乱が生じた場合に備えて、onChange値はUnixタイムスタンプ(X)ではなくUnixミリ秒タイムスタンプ(x)として入力されるようです。
これにより、_2015-07-15T15:02:00.000+00:00
_のような文字列が出力されます。
toISOString()
は使用しないでください。代わりに、次のようなものを使用してください。
moment.utc(1387839600, "X").utcOffset(1).format('YYYY-MM-DD') + "[T" + moment.utc(1387839600, "X").utcOffset(1).format('HH:mm:ss.000]')