Laatste 10 wijzigingen in tabel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Allemaal bedankt voor de hulp :-)
- SanThe - op 14/08/2019 12:23:39:
Dan zou dit moeten werken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
}
?>
$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.
Gewijzigd op 15/08/2019 16:48:22 door Thomas van den Heuvel