Avatar billede Asky Forsker
16. september 2023 - 20:56 Der er 5 kommentarer og
1 løsning

Datokode i PHP

Ligesom jeg lige syntes, at der var styr på det, havde jeg en php-side, der gav HTTP 500 fejl. For et par dage siden, virkede den. Efter en time fandt jeg fejlen. Det var datokoden i toppen af HTML-delen.
Den gamle kode med weekday array osv. var deprecated.
De fleste sider havde heldigvis en nyere kode nemlig denne:

setlocale(LC_TIME, "da_DK.UTF8");
$this_day = strftime("%A, %e. %B %Y");
I HTML-delen <?echo "$this_day"?>
Men er den så den sidste nye, eller skal den også snart skiftes ud?
Avatar billede arne_v Ekspert
16. september 2023 - 21:35 #1
strtime blev deprecated i 8.1 !

De synes at anbefale klassen IntlDateFormatter til dette brug.

https://www.php.net/manual/en/function.strftime.php
Avatar billede arne_v Ekspert
16. september 2023 - 21:59 #2
Jeg har aldrig brugt IntlDateFormatter før, men den er ikke så meget vasnkeligere end alt muligt andet.

Eksempel:

<?php
$t = time();

setlocale(LC_TIME, 'dan_DNK.UTF8');
$old = strftime("%A, %e. %B %Y", $t);
echo "old = $old\r\n";

$fmt = new IntlDateFormatter("dan_DNK", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Copenhagen', IntlDateFormatter::GREGORIAN, 'EEEE, d. MMMM yyyy');
$new = $fmt->format($t);
echo "new = $new\r\n";

?>
Avatar billede arne_v Ekspert
17. september 2023 - 01:01 #3
Jeg undrer mig iøvrigt lidt over at de har deprecated strftime.

strftime er bare en forward til C funktionen af samme navn - og den C funktion forsvinder ikke.

Men som de skriver et sted så er de lidt generet af at den C funktion har lidt forskellige muligheder på forskellige platforme (Linux, Windows etc.) og PHP kode derfor kan ændre opførsel ved platform skift.
Avatar billede Asky Forsker
17. september 2023 - 10:06 #4
Jeg har brugt din kode på denne måde:
Den virker, når den står i toppen af hjemmesiden som php, men jeg kan ikke sætte den ind i HTML-delen.
<?php
$t = time();

//setlocale(LC_TIME, 'dan_DNK.UTF8');
//$old = strftime("%A, %e. %B %Y", $t);
//echo "old = $old\r\n";

$fmt = new IntlDateFormatter("dan_DNK", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Copenhagen', IntlDateFormatter::GREGORIAN, 'EEEE, d. MMMM yyyy');
$new = $fmt->format($t);
echo "new = $new\r\n";
?>
Så prøvede jeg at skifte "new" ud med fx ordet Dato, men det virkede ikke efter hensigten.
Avatar billede arne_v Ekspert
17. september 2023 - 18:32 #5
DU skal vel bare have:

<?php
$fmt = new IntlDateFormatter("dan_DNK", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Copenhagen', IntlDateFormatter::GREGORIAN, 'EEEE, d. MMMM yyyy');
$t = time();
$idag = $fmt->format($t);
echo "$idag";
?>

$new eller $idag er bare et tilfældigt variabelnavn.
Avatar billede Asky Forsker
17. september 2023 - 18:58 #6
tak for det. Det er sat ind i koden ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester