Dato tre numeri interi non negativi y, me d(di cui almeno uno deve essere positivo) e una data valida con un anno positivo (in qualsiasi formato ragionevole che include l'anno, mese e giorno, e nessuna informazione aggiuntiva), l'uscita data che è yanni, mmesi e dgiorni dopo la data originale.
Il calendario gregoriano deve essere utilizzato per tutte le date (anche date precedenti all'adozione del calendario gregoriano).
Il metodo per calcolare la data successiva è il seguente:
- Aggiungi
yall'anno - Aggiungi
mal mese - Normalizza la data applicando i rollover (es.
2018-13-01->2019-01-01) - Se il giorno è trascorso l'ultimo giorno del mese, cambiarlo nell'ultimo giorno del mese (ad es.
2018-02-30->2018-02-28) - Aggiungi
dal giorno - Normalizza la data applicando i rollover (es.
2019-01-32->2019-02-01)
Gli anni bisestili (anni divisibili per 4, ma non divisibili per 100 se non anche divisibili per 400) devono essere gestiti in modo appropriato. Tutti gli input e gli output saranno all'interno dell'intervallo rappresentabile della tua lingua.
Casi test
I casi di test sono forniti nel formato input => output, dove si inputtrova un oggetto 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
È possibile utilizzare questo JSFiddle per i test.
Questo è code-golf , quindi vince la soluzione più breve (in ogni lingua).
y, me d(per esempio, potrebbe dessere 2.147.483 mila?)
All inputs and outputs will be within the representable integer range of your language.