(new Date('2012-12-01')).getMonth()
は、11
(getMonth
は0インデックス付け)の代わりに10
です。 Firefox、Chrome、Node.jsでテストしましたなぜこれが起こるのですか?(新しい日付( '2012-12-01'))。getMonth()=== 10?
答えて
タイムゾーンの問題が発生しています。あなたのJSエンジンはその文字列をそれ以上指定されていないのでUTCとして解釈します。 (new Date
によって使用される)specification of Date.parse
から:
文字列文字列の内容に応じて、現地時間、UTC時間、またはいくつかの他の時間帯における時刻と解釈されてもよいです。この関数は、まず、Date Time String Format(15.9.1.15)で呼び出された規則に従って、Stringの書式を解析しようとします。 Stringがその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式に戻ります。
タイムゾーンでは、datetimeはNov 30 2012 19:00:00 GMT-0500
- 11月です。 .getUTCMonth()
を使用すると、12月になるでしょう。しかし、Date.parse
を信用することは決してありません。したがって、Node.jsなどの制限された環境にいない場合は、文字列(正規表現など)を解析してnew Date(Date.UTC(year, month, date, …))
にフィードする必要があります。
私は、様々な状況下で異なった動作をするかもしれない構文解析メカニズムよりも、離散入力を使ってDateオブジェクトを構築することに頼る方が全体的に良いアイデアであることに同意します。 –
実際、この仕様はかなり明確だと思います。セクション15.9.1.15は次のように述べています。「タイムゾーンが存在しないため、オフセット値は「Z」です。」(Chromeは正しいので、Firefoxは間違っています) – sinelaw
OK、修正。 [ES5.1仕様の間違い](https://bugs.ecmascript.org/show_bug.cgi?id=112)のように見える - ISO-8601と一致するように意図されていたES5.1、Firefox&IEはISO-8601と一致します) – sinelaw
エラーは01の前に0が付いています。分かりません。なぜなら、これはなぜですか。ただし、1より前にゼロを削除すると、正しい月(11)が与えられます。
また、何かを意味する場合は、10月に間違った月を与えることを開始します。
短期修正、Firefox's caseために代わり01
私のためではありません。私は 'NaN'を取得し、' 11'では取得しません。 – dbkaplun
1を使用して、少なくとも、RFC2822はdate specificationsがFolding White Spaceによって分離されなければならないと述べています。試してください(new Date('2012 12 01')).getMonth();
セパレータとして-
の使用法は定義されていないようです。
- 1. 新しい日付()setMonth getMonthバグ?
- 2. JavaScriptの日付メソッドの不一致 - getDateとgetMonthの比較
- 3. 日付とJavaScriptの新しい日付
- 4. 新しい日付の差()と新しい日付(ヴァル)
- 5. getDay()、getMonth()、getYear()
- 6. 新しい日付()Node.jsの
- 7. Firebaseの新しい日付()?
- 8. getMonth()メソッドの問題Javascript
- 9. js 10月10日の日付変更(BST)
- 10. javascriptのカウントダウンタイマー、新しい日付
- 11. 新しい日付()が無効な日付を返す
- 12. なぜ新しい日付今日は今日昨日返す
- 13. 更新日時私はデータベースに日付を更新したい
- 14. 新しい日付()が正しいシステム日付に戻ります
- 15. PHPの新しいDateTimeと日付()
- 16. 新しい日付()。反応のgetFullYear()
- 17. 変数に基づいて日付を検索し、新しい日付を与えるためにその日付に何日かを追加します。
- 18. R文字列の日付(例:「2014年10月1日」)を日付形式
- 19. 最新の日付の日付を使用していないパラメータ
- 20. C++:10分前の日付時刻インスタンス
- 21. javascriptのgetMonthは先月のメッセージです
- 22. シフト日付がシッティング日付に更新されない
- 23. 新しい日付( '2017-12-31' ')と新しい日付( "2017-12-31")の相違点
- 24. 更新日付ピッカー
- 25. 最新の日付
- 26. SQLで日付別に毎日新しいテーブルを作成
- 27. Javascript getDate()とgetMonth()が間違った結果を返します
- 28. 日付型の新しい列を日付型の別の列から作成
- 29. 更新日付フィールドが
- 30. SQLは日付別に複数の値を日付別に新しい値に合計します
私はFFで試したときに11(期待通り)を返しました。どのブラウザを使用していますか? – nnnnnn
@nnnnnn私はあなたに何を伝えるべきか分からない。 Chrome、Firefox、Node.jsで発生します。 – dbkaplun
私の謝罪;明確化のためにありがとうございます。私は以下の答えを策定しました。 –