Compte tenu de trois entiers non négatifs y, met 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 yannées, des mmois et des djours 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 mau 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 inputtrouve 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, met d(par exemple pourrait dêtre 2147483000?)
                All inputs and outputs will be within the representable integer range of your language.