Rozdíl dvou dat v php.
Člověka by lákalo udělat toto (a radí to třeba i na fóru):
$date1 = strtotime("2010-01-08 20:25:00"); $date2 = strtotime("2010-01-01 18:24:40"); $diff = $date1-$date2; echo date('Y-m-d H:i:s',$diff); // vypise: 1970-01-08 03:00:20Jestli se nepletu, rozdíl je 7 dní, 2 hodiny a 20 sekund, takže ideálně by možná člověk čekal, že dostane něco jako 0000-00-07 02:00:20.
Jenže ouha - výše uvedený postup vrátí: 1970-01-08 03:00:20. Funkce date má totiž jako druhý parametr časové razítko, které se počítá od 1.1.1970.
Reference: osobní zkušenost a PHP date formatting for time difference (EN)
Pro rozdíl času (zadaného textovým řetězcem) lze použít toto:
$date1_in_sec = strtotime("2010-01-01 18:24:40"); $date2_in_sec = strtotime("2010-01-08 20:25:00"); $sec = $date2_in_sec - $date1_in_sec; $min = floor($sec/60); // celistve minuty $sec = $sec % 60; // zbytek jsou sekundy $hod = floor($min/60); // celistve hodiny $min = $min % 60; // zbytek jsou minuty $dni = floor($hod/24); // celistve dny $hod = $hod % 24; // zbytek jsou hodiny echo "Rozdíl: $dni dni, $hod hodin, $min minut a $sec sekund.";a dostaneme očekávaný výsledek, že rozdíl je 7 dni, 2 hodin, 0 minut a 20 sekund.
Inspirací tohoto skriptu mi bylo fórum na abclinuxu.cz.
Pohodlnější řešení alespoň podle manuálu slibuje funkce date_diff, dostupná je však až v PHP od verze 5.3.0.
Neříkám, že výše uvedené řešení je dobré. Ale prolezl jsem řadu fór a nepřišel jsem na nic lepšího. Pokud znáte lepší řešení, komentujte prosím.
Tento web jsem zakládal na střední, v roce 2008. Je zde hlavně archiv mé tvorby.
Aktuální věci publikuji kvůli úspoře času na Twitter.
Honza
"Lidé potřebují, aby řák v jejich životě fungoval co nejlépe. Řád v našem životě skýtá obraz o tom, jací jsme."