Avatar billede RJFreelance Praktikant
13. april 2012 - 23:47 Der er 4 kommentarer og
1 løsning

Lave date integer om til læselig tekst

Hej Eksperten

Hvordan laver jeg det nemmest når jeg har følgende string:

5042012

Om til f.eks. Mandag d. 5 april 2012

ved hjælp af php?

Jeg har 2 muligheder, enten 7 cifre eller 8, f.eks.:

10042012
8042012
15102012

I har nok fanget idéen. Håber i kan hjælpe, på forhånd tak
Avatar billede arne_v Ekspert
14. april 2012 - 01:53 #1
Det maa kunne laves paa mange maader men her en:

<?php
function dfmt($ds) {
if(strlen($ds) == 7) $ds = '0' . $ds;
    $d = substr($ds, 0, 2);
    $m = substr($ds, 2, 2);
    $y = substr($ds, 4, 4);
    return date('l j F Y', mktime(0, 0, 0, $m, $d, $y));
}

function test($ds) {
    $t = dfmt($ds);
    echo "$ds = $t\r\n";
}

test(10042012);
test(8042012);
test(15102012);
?>
Avatar billede inteeeL Nybegynder
14. april 2012 - 02:51 #2
Som supplement på Arnes svar er der her en udvidet kode, der returnerer outputtet på dansk, hvor du endvidere selv kan opstille det, som du ønsker.
<?php

date_default_timezone_set('Europe/Copenhagen');

function dfmt($ds) {
    //Ugedage på dansk
    $dayname[0] = "Søndag";
    $dayname[1] = "Mandag";
    $dayname[2] = "Tirsdag";
    $dayname[3] = "Onsdag";
    $dayname[4] = "Torsdag";
    $dayname[5] = "Fredag";
    $dayname[6] = "Lørdag";
   
    //Månederne på dansk
    $monthname[1] = "januar";
    $monthname[2] = "februar";
    $monthname[3] = "marts";
    $monthname[4] = "april";
    $monthname[5] = "maj";
    $monthname[6] = "juni";
    $monthname[7] = "juli";
    $monthname[8] = "august";
    $monthname[9] = "september";
    $monthname[10] = "oktober";
    $monthname[11] = "november";
    $monthname[12] = "december";

    if(strlen($ds) == 7) $ds = '0' . $ds;
    $d = substr($ds, 0, 2);
    $m = substr($ds, 2, 2);
    $y = substr($ds, 4, 4);
    $day = date('w', mktime(0, 0, 0, $m, $d, $y));
    $month = date('n', mktime(0, 0, 0, $m, $d, $y));
    return $dayname[$day].' d. '.$d.'&nbsp;'.$monthname[$month].'&nbsp;'.$y;
}

function test($ds) {
    $t = dfmt($ds);
    echo "$t\r\n<br>";
}

test(10042012);
test(8042012);
test(15102012);

?>

strftime() kunne også have været brugt.
Avatar billede arne_v Ekspert
14. april 2012 - 03:18 #3
Hvis jeg ville i18n'e, saa ville jeg bruge:

<?php
function dfmt($ds) {
if(strlen($ds) == 7) $ds = '0' . $ds;
    $d = substr($ds, 0, 2);
    $m = substr($ds, 2, 2);
    $y = substr($ds, 4, 4);
    return strftime('%A %#d %B %Y', mktime(0, 0, 0, $m, $d, $y));
}

function test($ds) {
    $t = dfmt($ds);
    echo "$ds = $t\r\n";
}

setlocale(LC_TIME, 'dan_DNK');
test(10042012);
test(8042012);
test(15102012);
?>
Avatar billede inteeeL Nybegynder
14. april 2012 - 16:53 #4
Jeg forstår ikke det her. Jeg supplerede i går Arnes svar med en kode, der viste, hvordan du kunne få datoen skrevet ud med dag og måned på dansk. I spørgsmåls-oversigten står der, at der er 3 kommentarer. Når jeg går ind på tråden, vises kun Arnes kommentar. Er den blevet fjernet eller lignende? :-)

I så fald kan du få koden igen.
<?php

date_default_timezone_set('Europe/Copenhagen');

function dfmt($ds) {
    // Ugedage på dansk
    $dayname[0] = "Søndag";
    $dayname[1] = "Mandag";
    $dayname[2] = "Tirsdag";
    $dayname[3] = "Onsdag";
    $dayname[4] = "Torsdag";
    $dayname[5] = "Fredag";
    $dayname[6] = "Lørdag";
   
    // Månederne på dansk
    $monthname[1] = "januar";
    $monthname[2] = "februar";
    $monthname[3] = "marts";
    $monthname[4] = "april";
    $monthname[5] = "maj";
    $monthname[6] = "juni";
    $monthname[7] = "juli";
    $monthname[8] = "august";
    $monthname[9] = "september";
    $monthname[10] = "oktober";
    $monthname[11] = "november";
    $monthname[12] = "december";

    if(strlen($ds) == 7) $ds = '0' . $ds;
    $d = substr($ds, 0, 2);
    $m = substr($ds, 2, 2);
    $y = substr($ds, 4, 4);
    $day = date('w', mktime(0, 0, 0, $m, $d, $y));
    $month = date('n', mktime(0, 0, 0, $m, $d, $y));
    return $dayname[$day].' d. '.$d.'&nbsp;'.$monthname[$month].'&nbsp;'.$y;
}

function test($ds) {
    $t = dfmt($ds);
    echo "$t\r\n<br>";
}

test(10042012);
test(8042012);
test(15102012);

?>

strftime() kunne også have været brugt.
Avatar billede inteeeL Nybegynder
14. april 2012 - 17:16 #5
Og så kom svarene frem igen. Vil også anbefale Arnes svar, så du kan spare linjer.
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