Autor Zpráva
Raketak
Profil *
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
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
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 *
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
a co počítat čas k začátku toho dne? (00:00)
Raketak
Profil *
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
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
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');

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: