Учитывая три неотрицательные целые числа 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, но не делимые на 100, если не делятся также на 400) должны обрабатываться соответствующим образом. Все входы и выходы будут в пределах представимого целого диапазона вашего языка.
Тестовые случаи
Контрольные примеры предоставляются в формате 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.