10

new Dateパーツに数値を使用してオブジェクトを作成すると、返される値は、「月」に入力した値よりも正確に1 か月進んでいます。

new Date(2012, 05, 17, 00, 00, 00)
Sun Jun 17 2012 00:00:00 GMT+0800 (HKT)  // june?!

ただし、まったく同じ文字列の通常の解析では、正しい時刻が返されます。

new Date("2012-05-17 00:00:00")
Thu May 17 2012 00:00:00 GMT+0800 (HKT)

ie/ff/chrome でも同じ結果が得られます。時間/分/秒を削除しても効果はありません。月を設定する前に 1 を引くことで回避できますが、代わりに、日付を文字列として書き出すことに切り替えました。

編集: 文字列解析は IE では機能しません。何をしたかわかりませんが、その仕事をしたことを誓います。それは問題です。そもそも避けた理由。今のところ、moment.js を使用するように切り替えました。

あ、今わかりました。通常のJavaの日付と同じように、私はめったにコーディングしませんが、それでも常にライブラリ(jodaなど)を使用します。とにかくひどい考えです。ここで skeets が次の質問に答えます: Java Calendar で 1 月が 0 になるのはなぜですか?

なぜこうなった?

4

1 に答える 1

17

プログラマーは 0 から数え始めます。したがって、月は 0(1 月) ~ 11(12 月) で表されます。

日がこの規則に従わない理由は、作成者が 30/31 月の違いで混乱しないようにするためです。

MDN から:

1 月の 0 から 12 月の 11 までの、月を表す整数値。

于 2012-05-18T08:11:21.650 に答える