Witam
Jak zrobić żeby tło komórki zmieniało się w zależności od czasu pozostającego do wyznaczonego terminu?
<table> <tr> <td style="width: 10%; text-align: center;">Lp</td> <td style="width: 45%; text-align: center;">Data</td> <td style="width: 45%; text-align: center;">Termin</td> </tr> <?php $czas = date("Y-m-d"); mysqli_query($connect, 'SET @i:=0'); $zapytanie = "SELECT *, @i:=@i+1 Lp FROM tabela"; $wykonaj = mysqli_query ($connect, $zapytanie); while ($wiersz=mysqli_fetch_array ($wykonaj)) function kolorczas() { if(strtotime($wiersz['termin']) <= strtotime("$czas +3 day")) echo "<td style=\"background-color:orange;\">" . $wiersz['termin'] . "</td>"; else echo "<td style=\"background-color:blue;\">" . $wiersz['termin'] . "</td>"; } { echo "<tr><td>" . $wiersz['Lp']. "</td><td>" . $czas . "</td>" . kolorczas() . "</tr>"; } ?> </table>
2 Odpowiedzi
Hej Andrzeju,
problemem jest policzenie, ile czasu zostało do danej daty, czy też pokolorowanie komórki?
Z tego co widzę, poprawnie ustawiasz background-color w CSS, stąd zakładam, że w liczeniu daty jest trudność.
Do dat polecam klasę DateTime, której możesz używać obiektowo lub proceduralnie. Do policzenia różnicy możesz użyć metody diff:
<php $start = '2020-10-15 20:25'; $end = '2020-10-16 21:21'; $dateStart = new DateTime($start); $dateEnd = new DateTime($end); $difference = $dateStart->diff($dateEnd); // w obiekcie $difference jest zawarta różnica w czasie $difference->days; // tutaj jest liczba dni $difference->h; // tutaj godzin, z tym że gdy wartość osiągnie 24, liczba dni zwiększa się o 1 a godziny wracają do zera $roznica_w_godzinach = $difference->days * 24 + $difference->h;
Natomiast wersja z strtotime również powinna zadziałać bez problemu.
Opiszesz dokładniej, co konkretnie nie działa?
Pewnie nie trafię z odpowiedzią, ale może chodzi o pewną ingerencję w wygląd kodu?
<table> <tr> <td style="width: 10%; text-align: center;">Lp</td> <td style="width: 45%; text-align: center;">Data</td> <td style="width: 45%; text-align: center;">Termin</td> </tr> <?php function kolorczas($t1, $t2) { if(strtotime($t1) <= strtotime("$t2 + 3 day")) echo "<td style=\"background-color:orange;\">" . $t1 . "</td>"; else echo "<td style=\"background-color:blue;\">" . $t1 . "</td>"; } $czas = date("Y-m-d"); mysqli_query($connect, 'SET @i:=0'); $zapytanie = "SELECT *, @i:=@i+1 Lp FROM tabela"; $wykonaj = mysqli_query ($connect, $zapytanie); while ($wiersz=mysqli_fetch_array ($wykonaj)) { echo "<tr><td>" . $wiersz['Lp']. "</td><td>" . $czas . "</td>" . kolorczas($wiersz['termin'],$czas) . "</tr>"; } ?> </table>


Marcin, jest błąd w Autorze komentarza – powinienem być ja (Andrzej)

Tak, właśnie widzę. Muszę sprawdzić o co chodzi. Dzięki!

Nazwy gości przy komentarzach już działają poprawnie.

Zwykle przy “składankach” unikam funkcji echo jak ognia! Rekomenduję użyć zmiennej np $str i robić tak:
$str = ”; // inicjacja
gdzieś w kodzie kolejno:
$str .= ‘;
$str .= jakas_funkcja($par1);
i tak dalej
i na końcu wchodzi echo całe na biało !
echo $str;
W kolejnym komentarzu poprawię funkcję na taką formę.

Lp
Data
Termin
<?php
function kolorczas($t1, $t2) {
if(strtotime($t1) <= strtotime("$t2 + 3 day"))
return "” . $t1 . “”;
else
return “” . $t1 . “”;
}
$str = ”;
$czas = date(“Y-m-d”);
mysqli_query($connect, ‘SET @i:=0’);
$zapytanie = “SELECT *, @i:=@i+1 Lp FROM tabela”;
$wykonaj = mysqli_query ($connect, $zapytanie);
while ($wiersz=mysqli_fetch_array ($wykonaj)) {
$str .= “” . $wiersz[‘Lp’]. “” . $czas . “”;
$str .= kolorczas($wiersz[‘termin’],$czas);
$str .= “”;
}
//var_dump($str);
echo $str;
?>

Wielkie dzięki Jacku za pomoc i poradę! Działa elegancko 🙂
Dzięki – o to właśnie chodziło. Zastosowałem złą funkcję w złym miejscu…
Po przerobieniu na Twoją wersję działa, ale jest jeden problem.
Komórka z funkcją wyświetla się nie na swoim miejscu, tylko niejako przed tabelą.
Sprawdziłem znaczniki i ilości komórek w wierszu, ale wygląda, że wszystko jest ok.
Co może być przyczyną takiego wyświetlania?