Mengingat tiga bilangan bulat non-negatif y
, m
dan 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 y
tahun, m
bulan, dan d
hari 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
y
ke tahun - Tambahkan
m
ke 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
d
ke 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 input
objek 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
, m
dan d
(misalnya bisa d
2147483000?)
All inputs and outputs will be within the representable integer range of your language.