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?
Annonceindlæg fra Computerworld
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'] ) );
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); ?>
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
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 :)
24. februar 2009 - 22:09
#5
Syntes dog også at coderdk skulle lægge et svar...
24. februar 2009 - 22:19
#6
Det er ok, jeg ville bare gøre opmærksom på, at min også virker efter hensigten ;)
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.
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
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" );
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
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 ); } }
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 );
}
}
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.
25. februar 2009 - 17:16
#14
kig på ucfirst()
26. februar 2009 - 14:20
#15
Du har gjort et ihærdigt stykke arbejde, coderdk, så læg et svar.
26. februar 2009 - 14:25
#16
:-)
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";
Vi tilbyder markedets bedste kurser inden for webudvikling