Autor Zpráva
Andrej.B
Profil
Zdravim,
mam problem pri logike zobrazenia akcie podla Datumu.
Mam v DB datum v timestamp - datum_plan_vyroby_end
Ak otvorim planovanie vyroby, zobrazuje mi co vsetko treba spravit s tym, ze je tam datum kedy to mam byt hotovo. Rad by som si ten cely riadok vyfarbil na zlto ak sa priblizim k tomu datumu na 3 dni.
Teda dnes je 10.11.2020 a ak je datum datum_plan_vyroby_end 11,12 alebo 13.11.2020 urobi sa akcia ze riadok v tabulke prida <tr class="bg-yellow"
Ak je to viac ako 3 dni, teda 14.11.2020 neurobi nic.
Pokial datum koliduje s dneskom alebo je uz mensi ako dnes, bude akcia na riadok <tr> class="bg-red"

Ako si mozem urobit podmienku? Netusim ako porovnat takto datumy.

datum_plan_vyroby_end+3 < DNES = nerob nic
datum_plan_vyroby_end+3 > dnes = yellow.
datum_plan_vyroby_end < dnes = red

Diky za pomoc
Kajman
Profil
Ten timestamp máte v php jalo číslo? Pak přičítáte 3 sekundy místo 3 dnů.
Andrej.B
Profil
Kajman:

tam je to myslene ako +3 dni, len pre tu predstavu... V skutocnosti je to datum_plan_vyroby_end+(60x60x24*3) ..
Cely ten problem je pre mna prilis.
anonym_
Profil *
Andrej.B:
A kde je konkrétně problém?

Mas timestamp v databazi, mas aktuální timestamp (time()), nebo jakýkoliv jiný formát data (date()). Je to o porovnání dvou čísel. Ten problém, nebo “co je na tebe příliš” moc nevidim.
Kajman
Profil
Jaký je výstup
var_dump($hodnotasloupce);
Andrej.B
Profil
ja mam prave problem s tou podmienkou v php...

if ($hotnotazDb <= dnes+3dni but > dnes) = zlta

netusim ako to dat do poriadku... ale hotove mi nikdo neda :)
Kajman
Profil
Dumpněte $hotnotazDb, protože nevíme jakého typu ta proměnná je!
Andrej.B
Profil
Kajman:
ako som pisal, datum je timestamp:

var_dump, mam tam 3 rozne testovacie polozky...

string(10) "1599987600" string(10) "1604826000" string(10) "1604653200"

Aby som mal vysledok RED:

// $timestamp2 je datum v timestamp formate ... $row['datum_plan_vyroby_end']

$now  = mktime(0, 0, 0, date("m")  , date("d"), date("Y")); // datum prave teraz
$danger= $timestamp2-$now;  // premenna koniec datum - teraz
$danger2= $timestamp2-$danger;

if ($timestamp2 < $danger2) { echo ' class="bg-danger"';} // ak je timestap2 mensi ako $danger sme uz v RED zone

Toto funguje ale je to krkolomne... Ale je to len na RED... Najskor by so potreboval asi podmienku 1 ze je to viac ako 3 dni a nepokracoavt dalej... Ak je to 3 az 1, vykonat podmienku 2 a potom ak je to 0 az nekonecno do minusu vykonat podmienku 3

if (podmienka 1) {
nevykonat nic
}
 else {
          if (podmienka 2) 
              { (warning) }
                else { (danger) }
}

Pre dnesny datum by platilo :

14.11.2020 a menej - RED
15.11.2020 - 17.11.2020 - yellow
18.11.2020 a viac - nic

Zamotane...


Tak som to konecne dal nejako do kopy, ale vypada to hrozne... funkcne, ale hrozne ...
Potrebujem proste obcas nieco zosmolit a vysledok je takyto:


$now  = mktime(0, 0, 0, date("m")  , date("d"), date("Y"));
$now3  = mktime(0, 0, 0, date("m")  , date("d")+3, date("Y"));
$danger = $timestamp2-$now;
$danger2 = $timestamp2-$danger;
if ($timestamp2 > $now3) 
    { echo ' class="bg-success"';} 
        else {
            if ($timestamp2 < $danger2) 
                { echo ' class="bg-danger"';} 
                    else { echo ' class="bg-warning"';}
             }

Kajman
Profil
Pokud nepotřebujete řešit to, že některé dny mají 23 nebo 25 hodin, tak stačí jen porovnat počet zbývajícíh sekund do termínu.
$timestamp2 = "1599987600";
$secondsleft = $timestamp2 - time();
$barva = "green";
if ($secondsleft<=0) {
    $barva = "red";
}
elseif ($secondsleft<=60*60*24*3) {
    $barva = "orange";
}
Andrej.B
Profil
Kajman:

tak to vypada super a viac zrozumitelne... Pouzijem vase.. Diky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0