Autor Zpráva
Oggymot
Profil
Zdravím a jsem to zase já :)

Tentokrát mám problém s odečtem hodin neboli chci vypsat uživateli kolik mu zbývá času do možnosti kliknout na tlačítko.

$datum = Db::querySingle('
            SELECT datum
            FROM uzivatele
        WHERE uzivatele_id=?
        ', $_SESSION['uzivatel_id']);
        
        
$c1 = Date("H:i");
        
$tr = $datum - $c1;
        
if($vyb == '1'){
$text = 'Nelze vybrat daně ( Zbývá: ' . $tr . ' )';
$textik ='Disabled';
}

V databázi mám datum nastavené jako TIME... Vše funguje, ale u Zbývá je pořád napsáno 1... Nevíte někdo čím to je ? Předem děkuji za odpověď.
lionel messi
Profil
Oggymot:
Nebolo by vhodnejšie pokračovať v pôvodnom vlákne Jak na odpočet?, keďže ide viac-menej iba o modifikáciu problému?

Nemusíš tento príspevok nakopírovať aj do pôvodnej témy. Počkaj na mmoderátora, ktorý ho sám presunie.
Moderátor Alphard: Díky, v principu souhlasím, ale už jsem to nechal v tomto vlákně.
Oggymot
Profil
lionel messi:
Ok, sorry. Příště to tam napíšu.
Alphard
Profil
Ten navržený způsob pro odčítání času je dosti naivní, protože pracuje s normálními řetězci. PHP se v takovém případě pokusí řetězce přetypovat na čísla (což se bude dařit, dokud nenarazí na :) a ta odečte. Výsledek je takový, že v $tr je rozdíl hodin a použení, že není dobré provádět aritmetické operace nad řetezci.

Buď lze počítat s unixovým timestampem (což se divím, že tady ještě nikdo nenavrhl), nebo lze použít instance objektů Datetime a Dateinterval.

$datum1 = new \Datetime('2015-04-04 17:36:00');
$datum2 = new \Datetime('2015-04-04 18:43:28');
$interval = $datum1->diff($datum2);

echo 'Rozdil mezi daty je '.$interval->format('%h:%I'), PHP_EOL;

// pokud může rozsah přesáhnout 24 hodin a chceme pocitat s hodinami (ne dny)
$hours = 24*$interval->days + $interval->h;
echo 'Rozdil mezi daty je '.sprintf('%d:%02d', $hours, $interval->i), PHP_EOL;
Oggymot
Profil
Děkuji už jsem to vyřešil :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0