luxon 日付の取得が思い通りにいかない

現在luxonで日付の取得を行っています。

「育児休業期間」(ラジオボタン)
選択肢:1年/1年半/2年
↑の選択肢によって、以下のいずれかに日付を入れるようにしています。
「●育児休業期間終了日(子の1歳到達時までのケース)」(日付)
「●育児休業期間終了日(1歳半まで延長)」(日付)
「●育児休業期間終了日(2歳まで延長)」(日付)

//フィールドの取得
var 出産日 = record['出産日'].value;

//出産予定日の時刻を取得
var 出産日_2 = luxon.DateTime.fromISO(出産日);

//育児休業期間の終了予定日・確定日を計算
// 終了確定日は出産日の1年後の前日(誕生日の前日)まで、

var 育児休業期間_終了確定_12ヵ月後 = 出産日_2.plus({months: 12});
var 育児休業期間_終了確定 = 育児休業期間_終了確定_12ヵ月後.minus({days: 1});

//育児休業期間(1年半)の終了確定日を計算

var 育児休業期間_終了確定_12ヵ月半後 = 出産日_2.plus({months: 18});
var 育児休業期間_終了確定_2 = 育児休業期間_終了確定_12ヵ月半後.minus({days: 1});

//育児休業期間(2年)の終了確定日を計算

var 育児休業期間_終了確定_24ヵ月後 = 出産日_2.plus({months: 24});
var 育児休業期間_終了確定_3 = 育児休業期間_終了確定_24ヵ月後.minus({days: 1});

全ての「日」は同じになるようにしたいと思っておりますが、
↑のコードだと、出産日が31日の場合に全て同じ日になりません。
例えば、「2021-10-31」を入力した場合、以下のようになってしまいます。

「●育児休業期間終了日(子の1歳到達時までのケース)」(日付)→「2022-10-30」
「●育児休業期間終了日(1歳半まで延長)」(日付)→「2023-04-29」
「●育児休業期間終了日(2歳まで延長)」(日付)→「2023-10-30」

以下のように表示させるにはどのようにすれば良いでしょうか。
「●育児休業期間終了日(子の1歳到達時までのケース)」(日付)→「2022-10-30」
「●育児休業期間終了日(1歳半まで延長)」(日付)→「2023-04-30」
「●育児休業期間終了日(2歳まで延長)」(日付)→「2023-10-30」

kobaharuさん

こんにちは。まだ解決されていないようでしたら、以下一例です。

 

出産日が31日の場合、plusした月により、2パターンに分けられます。

 

①plusした月が「1,3,5,7,8,10,12月」の場合(月末が31日の場合)

>当月30日とする。

 

②plusした月が「2,4,6,9,11月」の場合(月末が31日でない場合)

>当月月末とする。

※2月だけ28or29日になるため、月末がだめであれば、2月だけ条件を更に分ける必要があります。

例えば、月末が28日であれば+2日する、月末が29日であれば+1日する、など。

koichiさん

こんにちは。お返事が遅くなり申し訳ございません。

詳しくありがとうございます。参考にさせていただきます。