Ik zou uit een tabel de laatste 6 wijzigingen willen zoeken voor een DIY project.

Tabel Home_Inp
Kolom id, time, Inp_6, Inp_7

5035 , 2019-08-10 06:21:04 , 0 , 0
5036 , 2019-08-10 06:22:04 , 1 , 0
5037 , 2019-08-10 06:23:04 , 0 , 0
5038 , 2019-08-10 06:24:04 , 1 , 0
5039 , 2019-08-10 06:25:04 , 0 , 0
5040 , 2019-08-10 06:27:04 , 1 , 0
5041 , 2019-08-10 06:28:04 , 0 , 0
5042 , 2019-08-10 06:29:04 , 1 , 0
5043 , 2019-08-10 06:30:04 , 1 , 0
5044 , 2019-08-10 06:31:04 , 0 , 0
5045 , 2019-08-10 06:32:04 , 0 , 0
5046 , 2019-08-10 06:33:04 , 0 , 0
5047 , 2019-08-10 06:34:04 , 0 , 0
5048 , 2019-08-10 06:35:04 , 1 , 0
5049 , 2019-08-10 06:36:04 , 0 , 0
5050 , 2019-08-10 06:37:04 , 0 , 0
5051 , 2019-08-10 06:38:04 , 0 , 0
5062 , 2019-08-10 06:39:04 , 1 , 0
5053 , 2019-08-10 06:40:04 , 1 , 0
5054 , 2019-08-10 06:41:04 , 0 , 0



Resultaat zou dus iets zoals onderstaande moeten zijn


5035 , 2019-08-10 06:21:04 , 0 , 0
5036 , 2019-08-10 06:22:04 , 1 , 0
5037 , 2019-08-10 06:23:04 , 0 , 0
5038 , 2019-08-10 06:24:04 , 1 , 0
5039 , 2019-08-10 06:25:04 , 0 , 0
5040 , 2019-08-10 06:27:04 , 1 , 0
5041 , 2019-08-10 06:28:04 , 0 , 0
5042 , 2019-08-10 06:29:04 , 1 , 0
5043 , 2019-08-10 06:30:04 , 1 , 0
5044 , 2019-08-10 06:31:04 , 0 , 0
5045 , 2019-08-10 06:32:04 , 0 , 0
5046 , 2019-08-10 06:33:04 , 0 , 0
5047 , 2019-08-10 06:34:04 , 0 , 0
5048 , 2019-08-10 06:35:04 , 1 , 0
5049 , 2019-08-10 06:36:04 , 0 , 0
5050 , 2019-08-10 06:37:04 , 0 , 0
5051 , 2019-08-10 06:38:04 , 0 , 0
5062 , 2019-08-10 06:39:04 , 1 , 0
5053 , 2019-08-10 06:40:04 , 1 , 0
5054 , 2019-08-10 06:41:04 , 0 , 0

Ik had al onderstaande gevonden een aangepast maar het ik krijg het met mijn beperkte kennis niet in orde

select Home.time,Home.Inp_§
from (select Home_Inp.*,lag(Home_Inp.Inp_6) over(partition by name order by id) as prev_Inp_6
from Home_Inp
) l
where prev_Inp_6 <> Home_Inp.Inp_6
Dan zou dit moeten werken
<?php
while($row = mysqli_fetch_array($result))
{
date_default_timezone_set('UTC');
$datum = strtotime($row['time']);
date_default_timezone_set('Europe/Brussels');
echo "<tr>";
echo "<td>" . date("D M d, Y G:i a", $datum) . "</td>";
echo "<td>" . $row['Inp_6'] . "</td>";
echo "</tr>";
}
?>
Werkt inderdaad.

Allemaal bedankt voor de hulp :-)

Simpelweg omdat iets werkt, maakt het nog niet juist.

- SanThe - op 14/08/2019 12:23:39
Dan zou dit moeten werken
<?php
while($row = mysqli_fetch_array($result))
{
date_default_timezone_set('UTC');
$datum = strtotime($row['time']);
date_default_timezone_set('Europe/Brussels');
echo "<tr>";
echo "<td>" . date("D M d, Y G:i a", $datum) . "</td>";
echo "<td>" . $row['Inp_6'] . "</td>";
echo "</tr>";
}
?>

Ik zou deze aanpak niet volgen. Het "probleem" met bovenstaande code is dat je hier in principe de tijdszone van de applicatie vermengt met de tijdszone (van voorkeur) van een gebruiker en de geldende tijdszone ook elke iteratie van de loop aanpast. Na afloop van deze loop staat de tijdszone ook effectief ingesteld op Europe/Brussels wat onwenselijk is, tenzij elke andere snippet die datums en tijden gebruikt precies hetzelfde stramien (lees: pingpong spel) volgt.

Wat ik zou doen is zorgen dat je alles wegschrijft als UTC. En vervolgens, als je de datums ophaalt, deze definieert als zijnde UTC, en ze vervolgens bij weergave vertaalt naar de tijdszone-van-voorkeur. En die kan bijvoorbeeld uit een profiel of configuratie van de gebruiker komen.

Dit alles zonder aanpassing van de in de applicatie geldende tijdszone. Hier zouden ook geen aannames over moeten worden gedaan.

Dus zoiets:
<?php
$utcTZ = new DateTimeZone('UTC'); // alles uit de database is UTC
$userTZ = new DateTimeZone('Europe/Brussels'); // gewenste tijdszone, komt bijvoorbeeld uit gebruikersprofiel
$userFormat = 'D M d, Y G:i a'; // het gewenste format, dit zou ook een voorkeur kunnen zijn

while ($row = mysqli_fetch_array($result)) { // <-- waarom geen fetch_assoc() trouwens?
    $date = new DateTime($row['time'], $utcTZ); // datum is UTC
    $formattedDate = $date->setTimeZone($userTZ)->format($userFormat); // datum in gewenste tijdszone+format
    ?><tr>
        <td><?php echo $formattedDate; ?></td>
        <td><?php echo $row['Inp_6']; ?></td>
    </tr><?php
}
?>

NB: je geeft expliciet UTC mee bij het creëren van $date, zodat het niet eens uitmaakt wat de op dat moment geldende tijdszone is. Dus zelfs al staat de tijdszone niet ingesteld op de tijdszone die je wellicht zou verwachten, dan werkt dit nog steeds. Hetzelfde kun je doen bij het wegschrijven zodat hiermee gegarandeerd is dat dit ook echt als UTC wordt weggezet.

Als datums en tijden relevant zijn in een applicatie, dan lijkt het mij onverstandig om dingen over te laten aan toeval, m.a.w. stel altijd zoveel mogelijk expliciet in.

Reageren