Avatar billede t-johansen Juniormester
19. januar 2016 - 20:00 Der er 14 kommentarer og
1 løsning

lave dato til lokal sprog

Jeg har denne her i en while loop:

echo date_format(new DateTime($dagsdato_1), 'l d. F - Y');

som giver resultatet:

Tuesday 19. January - 2016


og

echo $dagsdato_1

bliver til 2016.01.19


men jeg vil rigtig gerne have den i et dansk tekst format


Jeg har læst mig frem til at man skal bruge setlocale og strftime  eks:

setlocale(LC_ALL, 'da_DK');

echo strftime("%A %d %B %Y", mktime(0, 0, 0, 12, 22, 1978));


men jeg kan ikke gennemskue hvordan jeg skal lave min sætning om til at passe til mit eksempel fra while loop.


Nogen der kan guide mig den rigtige vej.
Avatar billede arne_v Ekspert
19. januar 2016 - 20:08 #1
proev:

echo strftime("%A %d %B %Y", (new DateTime($dagsdato_1))->getTimestamp());
Avatar billede t-johansen Juniormester
19. januar 2016 - 20:37 #2
Den vil den ikke lege med

syntax error, unexpected T_OBJECT_OPERATOR
Avatar billede t-johansen Juniormester
19. januar 2016 - 20:42 #3
hvis det giver bedre mening så modificeres $dagsdato_1 i slutningen af whlie loop'en:


$dagsdato_1 = date("Y-m-d", strtotime($i++." day", strtotime($dagsdato)));



måske det roder med formatet?
Avatar billede arne_v Ekspert
19. januar 2016 - 20:52 #4
<?php
//setlocale(LC_ALL, 'da_DK'); // *nix
setlocale(LC_ALL, 'dan_DNK'); // windows
$dagsdato_1 = '2016/01/19';
echo strftime("%A %d %B %Y", (new DateTime($dagsdato_1))->getTimestamp());
?>


virker her
Avatar billede nemlig Professor
19. januar 2016 - 20:56 #5
Kunne løsningen ikke bare være:

$datoEN = explode(".", $dagsdato_1);
$dagsdato_1 = $datoEN[2].'.'.$datoEN[1].'.'.$datoEN[0];
Avatar billede t-johansen Juniormester
19. januar 2016 - 21:23 #6
Arne,

har prøvet at isætte kun din kode og selv her kommer fejlen

Parse error: syntax error, unexpected T_OBJECT_OPERATOR


#nemlig

den explode gør ikke rigtig noget
Avatar billede arne_v Ekspert
19. januar 2016 - 21:28 #7
gammel PHP version?

proev:

$dt = new DateTime($dagsdato_1);
echo strftime("%A %d %B %Y", $dt->getTimestamp());
Avatar billede nemlig Professor
19. januar 2016 - 21:30 #8
explode() splitter din dato i 3 sæt. Jeg så dit skilletegn som punktum, men kan se længere nede, at det er bindestreg.

$datoEN = explode("-", $dagsdato_1);
$dagsdato_1 = $datoEN[2].'-'.$datoEN[1].'-'.$datoEN[0];

Denne her burde også gøre det, hvis du har bindestreg som skilletegn i datoen:

$dagsdato_1 = date('d-m-Y', strtotime("$dagsdato_1"));
Avatar billede t-johansen Juniormester
19. januar 2016 - 21:40 #9
Den virkede arne.

Ja undersøgte det lige. php verion er sat til 5.2.

Jeg bør nok ændre den, er bare bange for hvor meget den "ødelægger".

hvilken version skal der ændres til? 7.0 eller ældre?
Avatar billede t-johansen Juniormester
19. januar 2016 - 21:48 #10
men selvom den sagtens kan vise æøå så vises datoen i den kode med ? tegn istedet for ø.
Avatar billede arne_v Ekspert
19. januar 2016 - 21:55 #11
Det lyder som et ISO-8859-1 vs UTF-8 problem.
Avatar billede arne_v Ekspert
19. januar 2016 - 21:56 #12
Doumentationen for strftime siger i bruger kommentarer:

If strange characters are returned use utf8_encode(strftime()) for UTF-8 characters
Avatar billede t-johansen Juniormester
19. januar 2016 - 21:59 #13
hmm det skulle jeg ellers have løst tidligere.

for den kan sagtens vise alle andre æøå. nå men det må jeg rode med.

takker, svar og du får point.

Ændrede forresten til php 7 og der var ikke nogen problemer.
Avatar billede arne_v Ekspert
19. januar 2016 - 22:01 #14
svar
Avatar billede t-johansen Juniormester
19. januar 2016 - 22:15 #15
Takker for den utf8_encode, den virkede.


@nemlig, vil gemme den explode sætning kan helt sikkert bruge den senere.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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