Autor | Zpráva | ||
---|---|---|---|
Raketak Profil * |
#1 · Zasláno: 24. 1. 2012, 17:24:39
Mám čas z XML 2012-01-28 23:55:00, který si převádím do Time() za pomocí:
$cas = strtotime("2012-01-28 23:55:00"); Jakým způsobem můžu dál získat informací, kolik třeba zbývá dnů, hodin a minut, než nastane daný čas (datum) 2012-01-28 23:55:00 ? Zkouším to takto, ale bohužel výsledek je nějaký divný: $cas = strtotime("2012-01-28 23:55:00"); $aktualni_cas = Time(); $cas_do_konce = $cas - $aktualni_cas; $cas_den = Date("j", $cas_do_konce); $cas_hodina = Date("H", $cas_do_konce); $cas_minuta = Date("i", $cas_do_konce); Výjde mě například: 5 dny 07 hodiny 35 minut, což je špatně, protože 28. ledna přeci bude už za 4 dny a ne za 5 dnů. Nevím jak to udělat :( |
||
Bertram Profil |
#2 · Zasláno: 24. 1. 2012, 17:48:06
Raketak:
Ahoj, podívej se na DateTime. |
||
Alphard Profil |
http://addons.nette.org/cs/helper-time-ago-in-words
Tento kód nedělá úplně přesně co máte v příkladě, ale možná se vám bude líbit víc. Když je něco za 5 dní, nemá smysl vypisovat minuty. Do title dávám pro zájemce absolutní čas. |
||
Keeehi Profil |
#4 · Zasláno: 24. 1. 2012, 18:34:31
Raketak:
Tak pokud chceš mít 4 dny tak pak ale budeš mít 31 hodin. Jde o to, že rozdíl v hodinách je 127 hodin., což když vydělíme 24 nám tedy dá 5,2916 dne. Takže ono to bude doopravdy až za 5 dní, i když se ti to datumově nezdá. PS: jinak datumově se to srovná v období mezí 23:56 až 23:59. Jinak řečeno až bude víc hodin, než je uloženo. |
||
Raketak Profil * |
#5 · Zasláno: 25. 1. 2012, 14:01:05
Bertram: Ale script ti taky vychází z
$delta = time() - $time; , což mám i já.
Keeehi to napsal dobře, avšak nechápu, jak tuto věc rozlousknout, aby zákazník byl spokojený a měl tam správný odpočet :( |
||
Ugo Profil |
#6 · Zasláno: 25. 1. 2012, 14:18:02
a co počítat čas k začátku toho dne? (00:00)
|
||
Raketak Profil * |
#7 · Zasláno: 25. 1. 2012, 17:19:41
Vyřešil jsem to matematikou a funguje to na 100%
$cas_do_konce = $cas - $aktualni_cas; $min = round($cas_do_konce / 60); $hod = round($min / 60); $cas_den = round($hod / 24); $cas_hodina = round($hod - ($cas_den * 24)); $cas_minuta = round($min - ($cas_den * 24 * 60) - ($cas_hodina * 60)); |
||
Keeehi Profil |
#8 · Zasláno: 25. 1. 2012, 18:38:09
Raketak:
„Vyřešil jsem to matematikou a funguje to na 100%“ Tak si tu matematiku spravte. Připravil jsem pro Vás malou demonstrační ukázku. $cas =1327554079; $aktualni_cas = 1327512679; // rozdíl je 11 hodin 30 minut neboli 41400 sekund $cas_do_konce = $cas - $aktualni_cas; $min = round($cas_do_konce / 60); $hod = round($min / 60); $cas_den = round($hod / 24); $cas_hodina = round($hod - ($cas_den * 24)); $cas_minuta = round($min - ($cas_den * 24 * 60) - ($cas_hodina * 60)); echo $cas_den." den ".$cas_hodina.":".$cas_minuta; Proč to nefunguje: Round zaokrouhluje podle matematických pravidel, což se při práci s časem moc nehodí. Vám by se hodila matematická funkce "dolní celá část" což je funkce floor(); „jak tuto věc rozlousknout, aby zákazník byl spokojený a měl tam správný odpočet :(“ Naučit zákazníka počítat, protože rozdíl času v [#1] příspěvku vzhledem k jeho vytvoření je opravdu 5 dní a nějaké drobné (5 dvacetičtyřhodinovek a ještě pár hodin k tomu jako bonus) |
||
Bertram Profil |
#9 · Zasláno: 25. 1. 2012, 20:47:49
Raketak:
„Bertram: Ale script ti taky vychází z $delta = time() - $time;, což mám i já.“ Já ale myslel něco takového: $dateTimeObj = new DateTime('2012-01-28 23:55:00'); echo "zadane: " . $dateTimeObj->format('Y-m-d H:i:s') . "<br />"; $dateTimeObjAktualni = new DateTime(); echo "dnes: " . $dateTimeObjAktualni->format('Y-m-d H:i:s')."<br />"; $rozdil = $dateTimeObjAktualni->diff($dateTimeObj); echo "rozdil: " . $rozdil->format('%R%d dny %H hodiny %i minuty'); |
||
Časová prodleva: 12 let
|
0