<p>moment()。toISOString()バグ、18番目を渡すと、17番目を返します</p>

作成日 2013年07月23日  ·  6コメント  ·  ソース: moment/moment

この問題は、ここで紹介したmoment()。toISOString()が原因のようです。

http://momentjs.com/docs/#/displaying/as -iso-string /
moment()。toISOString();

私がそうするなら、私はそうするかもしれませんが、コンソールで:

    n = moment.utc(new Date('2013-07-18T00:00:00+01:00'))

それは戻ります:

 Thu Jul 18 2013 00:00:00 GMT+0100 (GMT Daylight Time)

ここでtoISOString( )を呼び出すと、日付が突然17日になります。

  n.toISOString()

上記は18日ではなく17日を返します:

  "2013-07-17T23:00:00.000Z"

最も参考になるコメント

それはあなたのために働くかもしれません:

> moment().format('YYYY-MM-DD[T]HH:mm:ss.SSSZZ')
'2013-07-23T14:54:20.176-0700'

または

> moment().format('YYYY-MM-DD[T]HH:mm:ss.SSS')
'2013-07-23T14:54:20.176'

タイムゾーンを気にせず、単に時間を表示したい場合。

全てのコメント6件

ご覧のとおり、 toISOString常にUTCで時刻を表示します(特定の方法で表示することに加えて)。

@ichernev 、私はあなたの主張を完全に

それはあなたのために働くかもしれません:

> moment().format('YYYY-MM-DD[T]HH:mm:ss.SSSZZ')
'2013-07-23T14:54:20.176-0700'

または

> moment().format('YYYY-MM-DD[T]HH:mm:ss.SSS')
'2013-07-23T14:54:20.176'

タイムゾーンを気にせず、単に時間を表示したい場合。

@ichernev 、どうもありがとう。

toISOStringのkeepOffsetパラメーターを使用できます。

toISOString(keepOffset?:ブール値):文字列;

=>

moment()。toISOString(true)

これは本当に正しいですか?

moment('1970-01-01').toISOString()

出力:

1969-12-31T23:00:00.000Z

ほとんどの人は、特定の日付を瞬間的に渡し、それをtoISOStringとしてフォーマットすると、日付が変更されないことを期待すると思います。 関数がより予測可能な方法で動作するようにする場合、keepOffsetをデフォルトでtrueにしないのはなぜですか?

私が知っている瞬間が一貫されているネイティブとES2015に従ってJavaScriptのDate toISOString機能それでもこれだけの予期された動作のように感じることはありません。

このページは役に立ちましたか?
0 / 5 - 0 評価