Autor Zpráva
Duchaplny
Profil
Zdravím,

pokúšam sa odčítať od seba dva DATETIME stĺpce z tabuľky a získať ich rozdiel.

V MySQL mám uložené dva stĺpce "pridane" a "vyriesene". Obidva sú formát DATETIME a vkladajú sa do nich hodnoty z funkcie now().

Výsledok, ktorý chcem je vlastne rozdiel v dátumoch:
x = vyriesene - pridane // vyriesene = 2012-02-11 20:02:26, pridane = 2012-02-10 20:02:26
x = 01:00:0000 - 00:00:00 // príp. lepší zápis: 0r,0m,1d - 0h,0m,0s
V tomto príklade x = 1 deň. Bohužiaľ, ich neviem od seba odčítať a vypísať výsledok.

To čo som našiel na nete, riešilo odčítanie buď len dátumu abo len času, príp. intervaly a neviem či to vôbec nejak riešilo prechod na letný/zimný čas. Ak by to ale bolo možné, tak by som tieto výpočty radšej robil priamo v SQL dotaze SELECT a v PHP len vypisoval výsledok na stránku.

Vie niekto poradiť ?
Duchaplny
Profil
Vymyslel som niečo takéto:
SELECT TIMESTAMPDIFF(YEAR, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as ROK,
TIMESTAMPDIFF(MONTH, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as MESIAC,
TIMESTAMPDIFF(DAY, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as DEN,
TIMESTAMPDIFF(HOUR, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as HODINA,
TIMESTAMPDIFF(MINUTE, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as MINUTA,
TIMESTAMPDIFF(SECOND, '2012-02-10 20:02:26', '2013-03-13 21:13:27') as SEKUNDA;

výsledok:
ROK     MESIAC     DEN     HODINA     MINUTA     SEKUNDA
1         13       397     9529       571751     34305061

Toto mi však nie je k ničomu, pretože mi to píše hrubý čas a neviem, asi by som musel každú položku prejsť nejakou php funkciou (netuším akou), aby to zobrazovalo podľa predstáv.

príklad:
pridane = 2012-02-10 20:02:26
vyriesene = 2012-02-11 14:04:30
Rozdiel času = 1 deň, 18 hod, 2 Min, 4 Sek // dúfam, že je to správne, už mi to nemyslí

V podstate ide o to, aby som videl, za aký dlhý čas sa vyriešila požiadavka, ktorú som pridal.

Vie niekto poradiť ? Ja už vážne netuším ako ďalej.
Duchaplny
Profil
Toto je najďalej ako som sa dostal.
$sek=strtotime("2012-02-21 20:02:26")-strtotime("2012-02-10 21:03:31");

$min=floor($sek/60);
$sek=$sek%60;

$hod=floor($min/60);
$min=$min%60;

$dni=floor($hod/24);
$hod=$hod%24;

echo "Rozdiel je $dni dni, $hod hodin, $min minut a $sek sekund.\n";
výstup -> Rozdiel je 10 dni, 22 hodin, 58 minut a 55 sekund. 

Funguje to, ale len keď tam dátumy zadám ručne. Keď ich ťahám z MySQL a dám tam niečo ako:
$sek=strtotime($vyriesene)-strtotime($pridane);
...
tak mi to všade vypíše 0. Pritom údaje to z db vytiahne, akurát strtotime() sa správa, akoby nepracoval so stringami. V čom je chyba ?
Duchaplny
Profil
Vyriešené..

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: