3つの非負の整数を考えるとy
、m
、およびd
(うち少なくとも一つが正でなければならない)と正の年と有効な日付(年、月、日を含む任意の合理的な形式であり、追加情報なし)、出力元の日付からy
年、m
月、d
日後の日付。
グレゴリオ暦はすべての日付に使用されます(グレゴリオ暦の採用前の日付も含みます)。
次の日付の計算方法は次のとおりです。
- 追加
y
年に m
月に追加- ロールオーバーを適用して日付を正規化(例:
2018-13-01
->2019-01-01
) - 日が月の最終日を過ぎている場合は、月の最終日に変更します(例
2018-02-30
->2018-02-28
)。 d
日に追加- ロールオーバーを適用して日付を正規化(例:
2019-01-32
->2019-02-01
)
うるう年(4で割り切れる年。ただし、400で割り切れる場合を除き、100で割り切れない年)は、適切に処理する必要があります。すべての入力と出力は、言語の表現可能な整数の範囲内にあります。
テストケース
テストケースは、JSONオブジェクトの形式input => output
で提供されinput
ます。
{"date":"2018-01-01","add":{"d":1}} => 2018-01-02
{"date":"2018-01-01","add":{"M":1}} => 2018-02-01
{"date":"2018-01-01","add":{"Y":1}} => 2019-01-01
{"date":"2018-01-30","add":{"M":1}} => 2018-02-28
{"date":"2018-01-30","add":{"M":2}} => 2018-03-30
{"date":"2000-02-29","add":{"Y":1}} => 2001-02-28
{"date":"2000-02-29","add":{"Y":4}} => 2004-02-29
{"date":"2000-01-30","add":{"d":2}} => 2000-02-01
{"date":"2018-01-01","add":{"Y":2,"M":3,"d":4}} => 2020-04-05
{"date":"2018-01-01","add":{"Y":5,"M":15,"d":40}} => 2024-05-11
このJSFiddleをテストに使用できます。
これはcode-golfなので、(各言語で)最短のソリューションが優先されます。
y
、m
そしてd
(例えば、可能性がd
2147483000も?)
All inputs and outputs will be within the representable integer range of your language.