Dado tres números enteros no negativos y
, m
y 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 y
años, m
meses y d
dí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
y
al año - Agregar
m
al 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
d
al 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 input
es 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
, m
y d
(por ejemplo, podría d
ser 2147483000?)
All inputs and outputs will be within the representable integer range of your language.