给定三个非负整数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
)
years年(除以4的年份,除非不能除以400的整数,否则不能除以100)必须适当处理。所有输入和输出将在您语言的可表示整数范围内。
测试用例
测试用例以格式提供input => output
,其中input
是JSON对象。
{"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进行测试。
这是 代码高尔夫球,因此以最短的解决方案(每种语言)为准。
y
,m
以及d
(如可能d
是2147483000?)
All inputs and outputs will be within the representable integer range of your language.