Kan Apache visa server-returer i svenskt format?

Permalänk
Medlem

Kan Apache visa server-returer i svenskt format?

Just för tillfället försöker jag förmå ett datum i databasen - i formatet "2004-10-07" - att visas på hemsidan i formatet "7 Oktober 2004". Men det finns ju även andra server-returer som man gärna skulle vilja ha i svenskt format, men Apache är ju engelsk. Finns det något sätt att confa Apache så att den får för sig att den är svenne och börjar snacka svenska? (kanske t.o.m. skånska)

... eller ska man behöva ägna tid åt att anpassa tonvis med if satser för att formattera ut-datan i PHP-koden? Finns det ingen väg runt det?

Jag trodde jag skulle få till det med nedanstående script, men icke då .. utdatan från detta vart "Oct 7 2004"

<? function makeStamp($theString) { if (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})", $theString, $strReg)) { $theStamp = mktime($strReg[4],$strReg[5],$strReg[6],$strReg[2],$strReg[3],$strReg[1]); } else if (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $theString, $strReg)) { $theStamp = mktime(0,0,0,$strReg[2],$strReg[3],$strReg[1]); } else if (ereg("([0-9]{2}):([0-9]{2}):([0-9]{2})", $theString, $strReg)) { $theStamp = mktime($strReg[1],$strReg[2],$strReg[3],0,0,0); } return $theStamp; } function makeDateTime($theString, $theFormat) { $theDate=date($theFormat, makeStamp($theString)); return $theDate; } ?> <Body> <?php echo makeDateTime($row_Datum['Nar'], 'M j, Y'); ?>

EDIT: Fixat enligt hajens uppmaning - tack för tipset.

Visa signatur

Jag använder datorn för att göra jobb bättre, inte för att jobba med att göra datorn bättre

Permalänk
Medlem

1. använd [ php ] och [ /php ] -taggarna utan mellanrum i forumet
2. klicka i "Inga smilies, tack. "

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

Hur sparar du datum i databasen? Som en sträng? Om som sträng, ändra typ till att spara det som date eller datetime. Därefter är det en bit kaka att servera datum hur som helst med PHPs avancerade datumformateringsfunktioner.

EDIT: Eller jag kanske är helt ute och cyklar?

Visa signatur

10 RTFM
20 RTFAQ
30 STFW

Permalänk
Medlem

andrin: Jag tycker iaf du är på rätt väg

Visa signatur

Övriga Ämnen - Enbart för människor som är seriösa!

Permalänk
Medlem

Själv använder jag:
setlocale (LC_ALL, 'sv_SE.ISO8859-1');
och
strftime ("%A %e %B - %H:%M", $unix_tid)
Då får du t.ex. "Torsdag 16 September - 18:45" precis som på min sida www.keffatliv.ath.cx
Tänk på att du får leverara tidsinformationen i unix_time format. T.ex. såhär:

$years = substr($mysql_rad['tid'],0,4 ); $months = substr($mysql_rad['tid'],4,2 ); $days = substr($mysql_rad['tid'],6,2 ); $hours = substr($mysql_rad['tid'],8,2 ); $minutes = substr($mysql_rad['tid'],10,2 ); $seconds = substr($mysql_rad['tid'],12,2 ); $unix_tid = mktime($hours, $minutes, $seconds, $months, $days, $years);

Edit: I det här fallet kommer datan från ett timestamp(14)-fält i mysql.

Mer finns att läsa på: http://se.php.net/manual/en/function.setlocale.php

Permalänk
Medlem

Locke:
har du testat om "SELECT UNIX_TIMESTAMP(tid) AS tid FROM tabell" funkar? så kanske du slipper mecka med substr för att formatera om tidsstämpeln...

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Ja blir vansinnig !! Jag får !#@%=?!! inte till det. Så ursäkta om jag bumpar upp den här gamla hörnan, men jag tror att lösningen finns väldigt tätt inpå här. (Kan ASP bra, men ny på PHP)

Locke, din lösning mejkar sense men jag får inte ihop det riktigt.
Mitt datum anges i MySQL "tabellnamn" som timestamp. Och jag har inga problem att få ut det på sidan eller formattera till det lite granna. Men .. när jag försöker formatera enligt din mall så skiter det sig (error) eller så blir ut-datan "null".

Skulle gärna diskutera saken men jag tror jag fattar det lättast om du helt enkelt visar mig. Såhär ser ett exempel på mina koder där jag vill förändra datumet-formatet till svenska ut:

<?php if (!isset($KT_error)) { $KT_error = false; } if(isset($KT_FormState) && $KT_FormState == "NEW") $KT_error = true; if (!$KT_error) { $query_Spelningar = "SELECT Nar FROM spelningar WHERE Nar > 'Now()' ORDER BY Nar ASC"; $Spelningar = $Localhost->SelectLimit($query_Spelningar) or die($Localhost->ErrorMsg()); $totalRows_Spelningar = $Spelningar->RecordCount();} else {$Spelningar = &$KT_fakeRs;} ?> <BODY> <?php while (!$Spelningar->EOF) { ?> <?php echo $Spelningar->Fields('Nar'); ?> <?php $Spelningar->MoveNext();} ?> <?php // Nedanstående funkar icke, utdatan blir null: $years = substr($Spelningar->Fields['Nar'],0,4 ); $months = substr($Spelningar->Fields['Nar'],4,2 ); $days = substr($Spelningar->Fields['Nar'],6,2 ); $hours = substr($Spelningar->Fields['Nar'],8,2 ); $minutes = substr($Spelningar->Fields['Nar'],10,2 ); $seconds = substr($Spelningar->Fields['Nar'],12,2 ); $unix_tid = mktime($hours, $minutes, $seconds, $months, $days, $years); setlocale(LC_ALL, 'sv_SE.ISO8859-1'); Strftime("%A %e %B - %H:%M", $unix_tid); ?> </BODY> <?php $Spelningar->Close(); ?>

Visa signatur

Jag använder datorn för att göra jobb bättre, inte för att jobba med att göra datorn bättre

Permalänk
Medlem

du måste använda den där funktionen i "while-loopen" under BODY, annars försöker den printa ett datum efter att $Spelningar blivit EOF, dvs när Fields['Nar'] är NULL...

Testa detta:

<body> <?php setlocale( LC_ALL, 'sv_SE.ISO8859-1' ); while ( !$Spelningar->EOF ) { $years = substr( $Spelningar->Fields['Nar'], 0, 4 ); $months = substr( $Spelningar->Fields['Nar'], 4, 2 ); $days = substr( $Spelningar->Fields['Nar'], 6, 2 ); $hours = substr( $Spelningar->Fields['Nar'], 8, 2 ); $minutes = substr( $Spelningar->Fields['Nar'], 10, 2 ); $seconds = substr( $Spelningar->Fields['Nar'], 12, 2 ); $unix_tid = mktime( $hours, $minutes, $seconds, $months, $days, $years ); echo Strftime( "%A %e %B - %H:%M", $unix_tid )."<br />\n"; $Spelningar->MoveNext(); } ?> </body>

sen måste jag bara fråga; vad är det för syntax du kör med? ($Spelningar->RecordCount och liknande...) hittar inget som liknar det i PHP-manualen, men det kanske bara är jag som är kass på att söka..?

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Tack Jovnas, självklart har du rätt. Men tro på fan att det inte funkade i alla fall - utdata = Null

Syntaxen jag använder kommer av en gammal kvarleva från när jag lärde mig ASP/ASP.net. Syntaxen kommer ifrån en ADOdb-koppling som kan ansluta till en jäkla massa databaser utan att man behöver anpassa koden. För att kunna använda den måste man anropa alla de (tonvis med) variabler och arrays som kopplings-scriptet fastställt som standard på en hel del skumma sätt. Jag har inte själv gjort kopplingen, tror den kommer från Macromedia på nåt sätt. Tror också den kan vara en av anledningarna till att shitten vägrar funka.

Så, efter lite bökande i hederlig gammal MySQL-koppling så är nu saken löst och för den som vill veta en bra lösning (som alternativ till Lockes lösning ovan) så kommer den här:
(Funkar fint på mitt system - XP pro, Apache 1.3.31, PHP 4.3.8, MySQL 3.23.52)

<?php $Datum = $row_querynamn['Datumkolumn']; setlocale (LC_ALL, ""); // formatera nedan hur datumet/tiden ska visas på hemsidan // men se till att om du vill visa t.ex. sekunder på hemsidan // måste sekunder finnas angivna i datum-cellen i dBn med. print (strftime ("%A den %#d %B", $Datum)); ?>

Hoppas nån mer kan ha glädje av detta än jag
Happy coding

Visa signatur

Jag använder datorn för att göra jobb bättre, inte för att jobba med att göra datorn bättre

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av jovnas
Locke:
har du testat om "SELECT UNIX_TIMESTAMP(tid) AS tid FROM tabell" funkar? så kanske du slipper mecka med substr för att formatera om tidsstämpeln...

Det låter ju utmärkt, ska genast pröva.