Hoi

Ik slaag er maar niet in om de juiste tijd te hebben in wamp
Alle codes hieronder geven 2u te vroeg aan
//werken gelemaal niet 'nl_BE', 'nl_NL', 'nl_NL.ISO8859-1', 'fr_FR.UTF-8',
foreach(array('', 'fra', 'Dutch_Belgium', 'nld_Bel.utf-8', 'Dutch_Netherlands', 'Dutch', 'nl', 'nld_NLD') as $l) {
    echo $l . '<br>' . setlocale(LC_ALL, $l) . date('d/m/Y H:i:s') . '<hr>';
}


En ja ik vond dit https://www.phphulp.nl/php/script/snippets/setlocale-nl/1386/setlocalenl/1003/ maar werkt ook niet

Veel sites zeggen gebruik strftime maar dat werkt niet meer.

Hoe krijg ik zowel in de winter als in de zomer de juiste tijd? Liefst de Belgische. Je weet maar nooit dat Be of NL de winter- of zomertijd afschaft en de andere niet :)

Jan

PHP Version 8.3
Je kunt de DateTimeZone ook meegeven bij het declareren van een DateTime of DateTimeImmutable, bijvoorbeeld:


<?php

declare(strict_types=1);

$now = new \DateTimeImmutable('now', new \DateTimeZone('Europe/Brussels'));

?>


De tijdzone geldt dan uitsluitend voor deze specifieke DateTime, zodat je niet meer afhankelijk bent van de configuratie.
of, je went je aan om altijd die timezone mee te geven, om niet afhankelijk te zijn van een admin die ineens bij een update de timezone niet bijwerkt, of dat bij een verhuizing naar een andere server alles omvalt.
OK allen bedankt. Nog even alles goed doornemen en ik zie wel hoe ik het doe:)
OP een paar extra weken komt het niet aan. 't is al jaren verkeerd.
Je kan de tijdzone in php.ini kwijt, als je de tijdzone globaal wilt gebruiken. php.ini werkt ook vaak als extensie per virtualhost op een server.

Je kan het ook in PHP defineeren. Dat is weer handig als je deze in je webapplicatie instelbaar wilt maken.
Zo heb ik het gedaan op mijn site:
<?php
putenv("TZ=Europe/Amsterdam");

$t = date("H");
$m = date("i");

echo "<H2>Het is nu " . $t;
echo "u" .$m;
echo "</H2>";
?>
Dat is een weergave :). Geen berekening. IK moet start en nu van elkaar aftrekken en zo de voorziene eindtijd berekenen
(nu-start)/gemiddelde duur per stuk * aantal stuks = eindtijd. Dat is geen probleem. De weergave wel dus zelf maar nieuwe functie gemaakt

    function mijntijd($seconden) {
        $s=(int)$seconden;
        $h=(int)($s/3600);
        $s -= $h*3600;
        $m = (int)($s/60);
        $s -= (int)($m*60);
        return str_pad($h, 2, '0', STR_PAD_LEFT) . ':' . str_pad($m, 2, '0', STR_PAD_LEFT) . ':' . str_pad($s, 2, '0', STR_PAD_LEFT);
    }
Wat je nodig heb is wat men algemeen verstaat onder een 'Interval'. Naast DateInterval heeft PHP gelukkig de Intl -extensie (zie mijn vorige post) de juiste berekeningen via IntlCalendar::fieldDifference().
Daarna hoef je alleen de formatting nog zelf te regelen met str_pad().

Gezien dat je data toch meestal in een database zit kan je ook de database gebruiken voor berekeningen.
PostgreSQL kent bijvoorbeeld ook gewoon het datatype interval. Als je je database in de juiste locale hebt staan hoef je niet eens meer zelf een formatting-functie te maken.

Reageren