Dado tres números enteros no negativos y, my d(de los cuales al menos uno debe ser positivo) y una fecha válida con un año positivo (en cualquier formato razonable, que incluye el año, mes y día, y no hay información adicional), la salida de la fecha que es yaños, mmeses y ddías después de la fecha original.
El calendario gregoriano se debe utilizar para todas las fechas (incluso las fechas anteriores a la adopción del calendario gregoriano).
El método para calcular la próxima fecha es el siguiente:
- Añadir
yal año - Agregar
mal mes - Normalice la fecha aplicando reinversiones (por ejemplo,
2018-13-01->2019-01-01) - Si el día ha pasado el último día del mes, cámbielo al último día del mes (por ejemplo,
2018-02-30->2018-02-28) - Añadir
dal día - Normalice la fecha aplicando reinversiones (por ejemplo,
2019-01-32->2019-02-01)
Los años bisiestos (años divisibles por 4, pero no divisibles por 100 a menos que también sean divisibles por 400) deben manejarse adecuadamente. Todas las entradas y salidas estarán dentro del rango entero representable de su idioma.
Casos de prueba
Los casos de prueba se proporcionan en el formato input => output, donde inputes un objeto 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
Puede usar este JSFiddle para realizar pruebas.
Este es el código de golf , por lo que gana la solución más corta (en cada idioma).
y, my d(por ejemplo, podría dser 2147483000?)
All inputs and outputs will be within the representable integer range of your language.