Avatar billede compac Seniormester
23. februar 2009 - 21:49 Der er 15 kommentarer og
2 løsninger

Tilføj ugedag på dato

Jeg har en kolonne i min database, som indeholder datoer i formatet: YYYY-MM-DD

når jeg har udtrukket dem, er jeg interesseret i at få tilføjet ugedage således:

f.eks: Man. 1.3.

- gerne uden årstal.

Hvordan klarer jeg den?
Avatar billede coderdk Praktikant
23. februar 2009 - 22:04 #1
Prøv:

setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1" );
echo strftime( "%a %d.%m", strtotime( $row['datofelt'] ) );
Avatar billede zynzz Praktikant
23. februar 2009 - 22:14 #2
Eller måske:

<?php
$a = 2009;
$b = 2;
$c = 28;


function FindUge($Aar, $Maaned, $Dag){

//Navne på dagene
$Dage = array("Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag");

$Find = date("N", mktime(0, 0, 0, $Maaned, $Dag, $Aar))-1;

return $Dage[$Find];
}

echo FindUge($a, $b, $c);
?>
Avatar billede compac Seniormester
23. februar 2009 - 22:36 #3
coderdk's forslag giver det korrekte format, men skriver kun de 2 første bogstaver af ugedagen.

zynzz kan jeg umiddelbart bruge (jeg skal  blot korrigere arrayets dage til at være på 3 bogstaver).

Læg et svar zynzz
Avatar billede coderdk Praktikant
23. februar 2009 - 23:09 #4
Erh, min skriver skam 3. Koden:

setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1" );
echo strftime( "%a %d.%m", strtotime( "2009-02-23" ) );

udskriver følgende resultat:

man 23.02

:)
Avatar billede zynzz Praktikant
24. februar 2009 - 22:09 #5
Syntes dog også at coderdk skulle lægge et svar...
Avatar billede coderdk Praktikant
24. februar 2009 - 22:19 #6
Det er ok, jeg ville bare gøre opmærksom på, at min også virker efter hensigten ;)
Avatar billede compac Seniormester
25. februar 2009 - 15:20 #7
Ja, jeg kan ikke lige gennemskue hvor fejlen ligger.

MEN selvom det ikke direkte har noget med mit oprindelige spørgsmål at gøre, kunne jeg tænke mig at vide, hvordan man får undertrykt de foranstillede nuller i månederne.

Jeg har prøvet med forskellige udlægninger af mktime -men forgæves.
Avatar billede coderdk Praktikant
25. februar 2009 - 15:29 #8
Det kan man vist ikke lige umiddelbart

setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1" );
$date = strtotime( "2009-02-09" );
echo strftime( "%a. %e.".date("n", $date), $date );

Skulle udskrive følgende resultat:

man. 9.2

Sjovt nok, kan strftime ikke det samme ;P
Avatar billede coderdk Praktikant
25. februar 2009 - 15:34 #9
Jeg har i øvrigt været ude for, at min ene server skulle have da_DK.UTF-8 også:

setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1", "da_DK.UTF-8" );
Avatar billede compac Seniormester
25. februar 2009 - 16:10 #10
Jeg kører lokalt på Apache-serveren. Jeg ved ikke om fejlen kan ligge der?

Min kode ser nu således ud:


-efter udtræk fra db:

if(mysql_num_rows($years) > 0) {
while($a = mysql_fetch_object($years)) {
          $dato =  $a -> dato;     
        setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1", "da_DK.UTF-8" ) 
$date = strtotime($dato);
echo strftime( "%a. %e.".date("n", $date), $date );
}
}

Resultatet er ikke opløftende:
Den tager kun 2 bogstaver med i ugedagen og udelader datoen i måneden helt:

f. eks 2009-05-06 bliver til: on. .5
Avatar billede compac Seniormester
25. februar 2009 - 16:13 #11
Lige en korrektion til koden (list-sætningen):
if(mysql_num_rows($years) > 0) {
while($a = mysql_fetch_object($years)) {
          $dato =  $a -> dato; 
        list($year, $month, $day) = split('[-.]', $dato); 
        setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1", "da_DK.UTF-8" ) 
$date = strtotime($dato);
echo strftime( "%a. %e.".date("n", $date), $date );
}
}
Avatar billede coderdk Praktikant
25. februar 2009 - 16:31 #12
Meget mærkeligt at du kun får 2 bogstaver ud... På de tre servere jeg har testet, får jeg konsekvent 3 ud - Det er også det der står i beskrivelsen på strftime: http://dk2.php.net/strftime

En work-around:

setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1", "da_DK.UTF-8" );
if(mysql_num_rows($years) > 0) {
  while($a = mysql_fetch_object($years)) {
        $date = strtotime( $a->dato );
        echo substr( strftime( "%A", $date ), 0, 3 ) . strftime( ". %e.".date("n", $date), $date );
  }
}
Avatar billede compac Seniormester
25. februar 2009 - 17:10 #13
Ja, nu er ugedagen iorden. Kan den skrives med stort begyndelsesbogstav?
Resten af datoen ser imidlertid stadig således ud:


f. eks 2009-05-06 bliver til: ons. .5

-altså ingen måned dato i måneden og måned til sidst i strengen.
Avatar billede coderdk Praktikant
25. februar 2009 - 17:16 #14
kig på ucfirst()
Avatar billede compac Seniormester
26. februar 2009 - 14:20 #15
Du har gjort et ihærdigt stykke arbejde, coderdk, så læg et svar.
Avatar billede coderdk Praktikant
26. februar 2009 - 14:25 #16
:-)
Avatar billede compac Seniormester
27. februar 2009 - 22:26 #17
Jeg er nået frem til et (utrolog klodset) svar. Men det opfylder mit behov.



  $dato =  $a -> dato;
          list($year, $month, $day) = split('[-.]', $dato); 
          $eind = mktime(0, 0, 0, $month, $day, $year)-1; 
          $dat = date("j-n",$eind);  //formatter dato
          setlocale( LC_TIME, "da", "dan", "danish", "da_DK", "da_DK.ISO8859-1", "da_DK.UTF-8" ); //find lokaltid
          $udate = strtotime( $a->dato );
          $ugedag = substr( strftime( "%A", $udate ), 0, 3 );  //find ugedag
          $ugedag = ucfirst($ugedag);  //stort begyndelsesbogstav
          $dato = "$ugedag. $dat";
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