Autor | Zpráva | ||
---|---|---|---|
Budry Profil |
#1 · Zasláno: 26. 9. 2012, 15:04:11
Zdravím,
narazil jsem na jeden "problém" s funkcí date a vypočítávání rozdílu mezi dny. Zjišťuji počet dní mezi dvěma daty ale při některých datech dochází k divným výsledkům. Ukázka: $a = date("U", mktime(0,0,0,10,29,2010)); $b = date("U", mktime(0,0,0,9,26,2010)); echo (($a - $b) / 3600 ) / 24; // vypíše 33 Výsledek je celé číslo (33) což by logicky být mělo. ale ten samý postup s jiným rokem vrací číslo desetinné (33.0416...): $a = date("U", mktime(0,0,0,10,29,2012)); $b = date("U", mktime(0,0,0,9,26,2012)); echo (($a - $b) / 3600 ) / 24; // vypíše 33.0416.... Zkoušel jsem i jiné roky jestli není problém s přestupným rokem, jak to zprvu vypadalo ale stejný problém je i s roky 2007, 2008, 2009 kdy oba vracejí desetinné číslo (33.0416...) Zato rok 2006 vrací celé číslo 33. Mohl by mi někdo vysvětlit proč to tak je? Pozn. Číslo za desetinou tečkou ke vždy stejné .0416... |
||
Kajman Profil |
#2 · Zasláno: 26. 9. 2012, 15:10:29
Je to posunem času z letního zpátky na středoevropský, což se u nás děje zpravidla ze soboty na neděli a přesné datum může být v různých rocích různé.
|
||
Budry Profil |
#3 · Zasláno: 26. 9. 2012, 16:36:35
Aha, díky furt sem přemýšlel čím by to mohlo být, ale todle mě nenapadlo
|
||
Enko Profil * |
#4 · Zasláno: 27. 9. 2012, 20:07:26
Na výpočet rozdílu v časech zkus použít třeba toto:
//funkce na zjisteni zbyvajiciho casu function get_time_difference($start, $end){ $uts['start'] = strtotime($start); $uts['end'] = strtotime($end); if($uts['start'] !== -1 && $uts['end'] !== -1){ if($uts['end'] >= $uts['start']){ $diff = $uts['end'] - $uts['start']; if($days = intval((floor($diff / 86400)))) $diff = $diff % 86400; if($hours = intval((floor($diff / 3600)))) $diff = $diff % 3600; if($minutes = intval((floor($diff / 60)))) $diff = $diff % 60; $diff = intval($diff); return(array('days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff)); } else{ //trigger_error("Konečný datum a čas je starší než počáteční!", E_USER_WARNING); } } else{ //trigger_error("Zjištěno neplatné datum nebo čas!", E_USER_WARNING); } return(false); } A pak to použiješ třeba takto: $arr = get_time_difference("now", "$rok-$mesic-$den $hodina:$minuta:$sekunda"); |
||
Kajman Profil |
#5 · Zasláno: 27. 9. 2012, 22:46:53
Enko:
Ale těch 20 řádků kódu navíc přeci neřeší nic na tom, že pro uvedené datumy to v českém prostředí vyjde v některých letech 33 dní a někdy 33 dní a jedna hodina. |
||
Časová prodleva: 12 let
|
0