Mengingat tiga bilangan bulat non-negatif y, mdan d(yang setidaknya satu harus positif) dan tanggal yang valid dengan tahun positif (dalam format yang wajar yang mencakup tahun, bulan, hari, dan tidak ada informasi tambahan), output tanggal yaitu ytahun, mbulan, dan dhari setelah tanggal asli.
Kalender Gregorian harus digunakan untuk semua tanggal (bahkan tanggal sebelum adopsi kalender Gregorian).
Metode untuk menghitung tanggal berikutnya adalah sebagai berikut:
- Tambahkan
yke tahun - Tambahkan
mke bulan - Normalisasi tanggal dengan menerapkan rollover (mis
2018-13-01- -2019-01-01) - Jika hari itu melewati hari terakhir bulan itu, ubah hari itu menjadi hari terakhir di bulan itu (mis.
2018-02-30->2018-02-28) - Tambahkan
dke hari itu - Normalisasi tanggal dengan menerapkan rollover (mis
2019-01-32- -2019-02-01)
Tahun kabisat (tahun habis dibagi 4, tetapi tidak habis dibagi 100 kecuali juga habis dibagi 400) harus ditangani dengan tepat. Semua input dan output akan berada dalam kisaran integer yang dapat diwakili dari bahasa Anda.
Uji Kasus
Test case disediakan dalam format input => output, di mana inputobjek 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
Anda dapat menggunakan JSFiddle ini untuk pengujian.
Ini adalah kode-golf , jadi solusi terpendek (dalam setiap bahasa) menang.
y, mdan d(misalnya bisa d2147483000?)
All inputs and outputs will be within the representable integer range of your language.