Laatste 10 wijzigingen in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

- SanThe -

- SanThe -

14/08/2019 12:23:39
Quote Anchor link
Dan zou dit moeten werken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?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>";
    }

?>
 
PHP hulp

PHP hulp

29/03/2024 01:27:52
 
Geert Geerts

Geert Geerts

15/08/2019 09:47:51
Quote Anchor link
Werkt inderdaad.

Allemaal bedankt voor de hulp :-)
 
Thomas van den Heuvel

Thomas van den Heuvel

15/08/2019 16:35:11
Quote Anchor link
Simpelweg omdat iets werkt, maakt het nog niet juist.

- SanThe - op 14/08/2019 12:23:39:
Dan zou dit moeten werken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>

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
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.