Dátumok különbsége hónapokban
Üdv!
Két dátumból szeretném megkapni, hogy a különbség hány hónap.
Egy bajom van vele, hogy a date_diff() fv nem jó, mert pl.:0 months ad vissza, pedig ez egy hónap. Gondolom a 30 és 31 hónapvége miatt.
Így persze jó, csak áprilisban nincs 31-dik nap:Hogyan tudnám két hónapvége különbségét jól kiszámítani független attól, hogy a hónap 30 v. 31 napos?
G.
■ Két dátumból szeretném megkapni, hogy a különbség hány hónap.
Egy bajom van vele, hogy a date_diff() fv nem jó, mert pl.:
$datetime1 = date_create('2014-03-31');
$datetime2 = date_create('2014-04-30');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%m months');
Így persze jó, csak áprilisban nincs 31-dik nap:
$datetime1 = date_create('2014-03-31');
$datetime2 = date_create('2014-04-31');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%m months');
// result: 1 months
G.
Definíció
A DateInterval objektum 31 nap időtartamot számít egy hónapnak.
Nem egyszerű
date
Február?
Igen, ez macerás... :(
Ezért mondtam, hogy fogalmazd
Az általam belinkelt
És az a megoldás is 28 napot
Próbálhatunk gondolatolvasni, de egy nem ismert feladatot nehéz megoldani.
Szerkesztve; január helyett márciust írtam először.
Pár teszt a fullextrás megoldásból:
Legalább a kérdezőnek is lesz
A kérdés alapvetően hülyeség,
Praktikusan a hónap 30 napos, és ezzel nagyon sok fejfájástól kíméled meg magad.
Gondolatolvasás
Egyébként szerintem valami ilyesmi kéne neki, elsősorban a hónap része:
Logikus káosz
A hónapművelet ugye úgy működik, hogy a hónapot módosítja, majd ha az adott nap nem létezik, akkor továbblép a következő hónaphoz – annyi nappal, amennyi az utolsó létező nap és az eredeti nap különbsége. Így lehet például, hogy 2014-03-31 mínusz 1 hónap eredménye 2014-03-03 – míg egy nappal később számolva mégis az ennél két nappal korábbi 2014-03-01-et kapjuk.
Ebből adódóan az sem mindegy, hogy milyen sorrendben végezzük a műveleteket. A nulla végösszegű -1 hónap és +1 hónap, valamint ennek fordítottja:
Nem véletlen, hogy a BKV-bérlet is 30 napos, és nem 1 hónapos – hiszen január 31-én vásárolva mi lenne az érvényesség vége? Február 27., mert az a következő hónap utolsó előtti napja? Vagy PHP-san március 2.? Előbbi esetben a 3 nappal korábban váltott bérletünk ugyanakkor járna le, utóbbiban viszont a 3 nappal később vásárolt lenne ugyanaddig érvényes. Ezek miatt minden olyan alkalmazáslogikai kérdés, ahol hónapokkal kell számolni, egyedi elbírálást igényel.