Compte tenu de trois entiers non négatifs y
, m
et d
(dont au moins un doit être positif) et une date valide une année positive (dans tout format raisonnable qui comprend l'année, le mois et le jour, et aucune information supplémentaire), la sortie du date correspondant à des y
années, des m
mois et des d
jours après la date d'origine.
Le calendrier grégorien doit être utilisé pour toutes les dates (même les dates antérieures à l'adoption du calendrier grégorien).
La méthode de calcul de la prochaine date est la suivante:
- Ajouter
y
à l'année - Ajouter
m
au mois - Normaliser la date en appliquant des survols (par exemple
2018-13-01
->2019-01-01
) - Si le jour est passé le dernier jour du mois, remplacez-le par le dernier jour du mois (par exemple
2018-02-30
->2018-02-28
) - Ajouter
d
à la journée - Normaliser la date en appliquant des survols (par exemple
2019-01-32
->2019-02-01
)
Les années bissextiles (années divisibles par 4, mais non divisibles par 100 sauf si elles sont également divisibles par 400) doivent être traitées de manière appropriée. Toutes les entrées et sorties seront dans la plage entière représentable de votre langue.
Cas de test
Les cas de test sont fournis au format input => output
, où se input
trouve un objet 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
Vous pouvez utiliser ce JSFiddle pour les tests.
Il s'agit de code-golf , donc la solution la plus courte (dans chaque langue) l'emporte.
y
, m
et d
(par exemple pourrait d
être 2147483000?)
All inputs and outputs will be within the representable integer range of your language.