JanKoWeb: Tvorba webu - PHP: jak na rozdíl dvou časů a rozdíl dvou dat
jankoweb.wz.cz
Světový den duševního vlastnictví.


PHP: jak na rozdíl dvou časů a rozdíl dvou dat

Rozdíl dvou dat v php.

Chybný přístup

Č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:20
Jestli 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)

Jak na to lépe?

Rozdíl data a času

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.

Závěr

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.

Rubrika Tvorba webu | Tagy Php, Datum, čas | Čt 05.05.2011 | 13775x

Náhodné články

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

"Nejjistější způsob, jak zdvojnásobit své peníze, je přeložit je napůl a strčit je do kapsy."

K. Hubbard