JanKoWeb: Tvorba webu - PHP: jak na rozdíl dvou časů a rozdíl dvou dat
jankoweb.wz.cz
Den Červeného kříže a Osvobození ČR.


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 | 13783x

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

"Žádné zlo se ještě nepodařilo odstranit tím, že byly odstraněny jeho symptomy. Je třeba odstranit jeho kauzu."

V. Havel