<p>moment.date($ day).month($ month).year($ year)はmoment([$ year、$ month、$ date])とは異なる動作をします</p>

作成日 2015年11月02日  ·  4コメント  ·  ソース: moment/moment

日付は、これら2つのセッターメソッドを使用して異なる方法で解析されます。
日付をOctober 31, 2015設定する場合。 チェーンメソッドは2015-10-01を返し、initメソッドは2015-10-31返します

var year = 2015;
var month = 9; //october
var day = 31;

console.log(moment().date(day).month(month).year(year).format('YYYY-MM-DD'));
//2015-10-01

console.log(moment([year, month, day]).format('YYYY-MM-DD'));
//2015-10-31

JSフィドル: http

最も参考になるコメント

これに注意してください

$('#chained').val(moment().year(2015).month(9).date(31).format('YYYY-MM-DD'));

2015-10-31正しく返します

実際、モーメントはJS日付オブジェクトの動作を模倣しています。

まず、現在の日付(今日の11月3日)を示すmoment()を作成します。 日を31に設定しようとしましたが、11月は30日しかないため、JSネイティブの日付オブジェクトは「インテリジェントに」1日を追加し、日付を12月1日に移動します(42などの任意の狂った数に日を設定できます。 JSは、適切な日数を追加し、必要に応じて月と年を巻き戻すことによって計算を行います。ベストプラクティスではなく、スローする方がよいでしょう)。

解決策は、このような問題を回避、常に年、月、日、時、分をこの順序で設定することです。

全てのコメント4件

これに注意してください

$('#chained').val(moment().year(2015).month(9).date(31).format('YYYY-MM-DD'));

2015-10-31正しく返します

実際、モーメントはJS日付オブジェクトの動作を模倣しています。

まず、現在の日付(今日の11月3日)を示すmoment()を作成します。 日を31に設定しようとしましたが、11月は30日しかないため、JSネイティブの日付オブジェクトは「インテリジェントに」1日を追加し、日付を12月1日に移動します(42などの任意の狂った数に日を設定できます。 JSは、適切な日数を追加し、必要に応じて月と年を巻き戻すことによって計算を行います。ベストプラクティスではなく、スローする方がよいでしょう)。

解決策は、このような問題を回避、常に年、月、日、時、分をこの順序で設定することです。

オーバーフロー処理に関する事実は、実際に文書化されています。

http://momentjs.com/docs/#/get -set / date /

月の日を取得または設定します。

1から31までの数字を受け入れます。範囲を超えると、数か月までバブルします。

あなたのようなコーナーケースでの振る舞いは確かに驚くべきものですが。

この一般的な問題を説明するドキュメントリポジトリでPRを開きました
https://github.com/moment/momentjs.com/pull/244

ええ、これが修正可能かどうかはわかりません。 Momentは、あなたが月を設定しようとしていることを知らないので、現在の月に日を設定しようとします。これは、31である場合とない場合があります。それは、あなたの意図を認識していません。 @ jakub-gのドキュメントPRは良いと思います。 そうしよう。

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