JanKoWeb: Tvorba webu - PHP: jak na rozdíl dvou časů a rozdíl dvou dat
"Nemusí pršet, stačí když kape..."
JanKoWeb - návody, postřehy a rady ze světa softwaru pro každého.
Recenze knih a humorná tvorba pro chvíle oddechu...
Mezinárodní den biologické rozmanitosti.

Do východu slunce 6 hodin a 15 minut (vyjde 08:09, zapadne 16:00).

"Nezbytným krokem k tomu, abyste od života získali věci, po kterých toužíte, je rozhodnout se, co vlastně chcete."

B. Stein
Galerie nemohla být načtena.
Jméno:
Číselně: dva a osm je
Musím to říci s povzdechem, že kdysi dávno před časem, uprostřed putování lesem, dvě různé cesty uviděl jsem. Vybral jsem tu, co málo prošlapali. A v tom spočívá rozdíl celý.
Při každém obnovení stránky se zde vypíše zpráva skriptu.

Skript je zdrojový kód interpretovaného programu.

Pohání celý tento web a rád komunikuje s návštěvníky.-)
RSS RSS zdroj článků a novinek

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

Náhodné články

© 2008-2025 JK, kontakt, právní upozornění
Powered by Janko's RS| XHTML, CSS, RSS, analýza kódu, SEO servis, dostupnost, hosting, líbí se Vám tu?
Požadavek: 0.82192 s, generování: 0.08999 s, paměť: 1.21 MB, sql dotazů: 8, CPU: 12.59

.