Nisam siguran da li sam razumeo problem.
Nešto na brzinu šta mi pada na pamet.
Prva ideja, možda je malo komplikovanija ali...
Imamo:
početni_datum (stariji)
krajnji_datum (mlađi)
godine = 0
meseci = 0
dani = 0
Sve dok je početni_datum manji od krajnji_datum radi:
Da li je (početni_datum + 1 godina) manji od krajnji_datum?
Jeste. Uvećaj početni_datum za 1 godinu. Uvećaj godine za 1.
Nije, a da li je (početni_datum + 1 mesec) manji od krajnji_datum?
Jeste. Uvećaj početni_datum za 1 mesec. Uvećaj meseci za 1.
Nije, a da li je (početni_datum + 1 dan) manji od krajnji_datum?
Jeste. Uvećaj početni_datum za 1 dan. Uvećaj dani za 1.
Kraj "Sve dok je početni_datum manji od krajnji_datum".
Ili nešto, možda jednostavnije:
Uzimaš posebno dan, mesec i godinu od oba datuma i oduzimaš ali paziš koja je vrednost veća ukoliko je vrednost za datum i mesec manjeg/starijeg datuma veća, onda smanjuješ godinu odnosno mesec za 1.
Tako npr. ukoliko imamo datume:
30/10/2010 i
22/05/2011
prostim oduzimanjem vrednosti za godine, mesec i dan dobio bi:
1 godina -5 meseci i -8 dana
Što nije rezultat.
a mi očekujemo
0 godina 6 meseca i 23 dana
Dakle prvo oduzimamo godine 2011 - 2010 i dobijamo 1 godinu
Zatim uzimamo mesece bilo bi 5 - 10 = -5 ali to nije ono što želimo, pošto je mesec starijeg datuma veći od mlađeg datuma, potrebno je uraditi:
12(broj meseci u godini) - 10 + 5 = 7 meseci
I pri tom godinu smanjujemo za 1 i dobijamo: 0 godina i 7 meseci
Zatim uzimamo dane (stariji)22 - (mlađi)30 = -8, što ponovo nije ono što očekujemo, dakle potrebno je
31 (broj dana za 10. mesec) - 30 + 22 = 23 dana
I smanjujemo broj meseci za 1 i dobijamo:
0 godina, 6 meseci, 23 dana
I npr.još jedan primer:
10/02/2010
22/05/2011
očekejemo:
1 godina, 3 meseca, 12 dana
Dakle idemo isto: mlađi datum - stariji
Uzimamo godine
2011 - 2010 = 1 godina
5 - 2 = 3 meseca
22 - 10 = 12 dana
Ili primer:
10/08/2010
22/05/2011
Očekijemo: 0 godina, 9 meseci, 12dana
Godine: 2011 - 2010 = 1 godina
Meseci: 5 - 8 = -3 greška!
12 - 8 + 5 = 9 meseci
godine - 1 = 0 godina
Dani: 22 - 10 = 12 dana
Rezultat:
0 godina, 9 meseci, 12 dana
Možda sam ja u nečemu pogrešio, ispraviće me neko ko je primetio neki problem u ovim rešenjima, trebalo bi sve ovo istestirati, ovo su samo ideje na brzinu, možda postoji i neka prostija rešenja.
Pozdrav.
Banned - Not available