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
"Žádné zlo se ještě nepodařilo odstranit tím, že byly odstraněny jeho symptomy. Je třeba odstranit jeho kauzu."