Avatar billede dotcom1 Nybegynder
25. august 2005 - 17:01 Der er 20 kommentarer og
2 løsninger

MySQL datoformat

Hej.

Jeg trækker en dato ud af en MySQL-database sådan: DATE_FORMAT(theDate, '%e. %M %Y kl. %H:%i:%s') men jeg vil gerne gøre datoformatet dansk og så vise måneden forkortet og skrevet med lille, dvs. i stedet for 25. August 2005 som det er nu, så skal det være 25. aug. 2005. Hvordan skrives det?

Mvh.
Avatar billede fixxxer Nybegynder
25. august 2005 - 17:07 #1
Jeg er usikker på om man kan opnå det resulatat udelukkende i MySQL, men jeg vil gøre det sådan i stedet:

DATE_FORMAT(theDate, '%e.') AS dag,
DATE_FORMAT(theDate, '%m') AS maaned,
DATE_FORMAT(theDate, '%Y') AS aar,
DATE_FORMAT(theDate, 'kl. %H:%i:%s') AS tid


I PHP ville jeg så smække et array sammen til dato'er:

$maaneder = array(1=>'Jan', 2=>'Feb', 3=>'Mar'); /* osv. */

<?=$fetch['dag'].' '.$maaneder[$fetch['maaned']].' '.$fetch['aar'].' '.$fetch['tid']; ?>
Avatar billede fixxxer Nybegynder
25. august 2005 - 17:09 #2
$maaneder = array(1=>'jan', 2=>'feb', 3=>'mar', 4=>'apr', 5=>'maj', 6=>'jun', 7=>'jul', 8=>'aug', 9=>'sep', 10=>'okt', 11=>'nov', 12=>'dec');

Så har du også den :)
Avatar billede dotcom1 Nybegynder
25. august 2005 - 17:25 #3
Okay. Hvordan skal det sættes ind hvis jeg har følgende kode:

$comments = executeSQL("SELECT name, email, comment, URL, DATE_FORMAT(theDate, '%e. %M %Y kl. %H:%i:%s') AS thisDate FROM comments WHERE postNo = '" . $postNo . "' ORDER BY theDate");

og

echo "<p class=\"date\">" . stripslashes($data['thisDate']) . "</p>\n";
Avatar billede fixxxer Nybegynder
25. august 2005 - 17:28 #4
$comments = executeSQL("SELECT name, email, comment, URL,
DATE_FORMAT(theDate, '%e.') AS dag,
DATE_FORMAT(theDate, '%m') AS maaned,
DATE_FORMAT(theDate, '%Y') AS aar,
DATE_FORMAT(theDate, 'kl. %H:%i:%s') AS tid
FROM comments WHERE postNo = '" . $postNo . "' ORDER BY theDate");

echo '<p class="date">'.$data['dag'].' '.$maaneder[$data['maaned']].' '.$data['aar'].' '.$data['tid'].'</p>'."\n";
Avatar billede jaw Nybegynder
25. august 2005 - 17:38 #5
Kan også gøres på en anden måde, tror jeg nok:

setlocale(LC_TIME, 'danish');
$comments = executeSQL("SELECT name, email, comment, URL, UNIX_TIMESTAMP(theDate) as thisDate FROM comments WHERE postNo = '" . $postNo . "' ORDER BY theDate");

Og så:
$danskTid = (int)strftime("%d", $fetch['unixtid']) . strftime(". %B %Y", $fetch['unixtid']);
Avatar billede jaw Nybegynder
25. august 2005 - 17:39 #6
Det skal måske lige være:
$danskTid = (int)strftime("%d", $fetch['unixtid']) . strftime(". %b %Y", $fetch['unixtid']);

...for at ligne det du søger. Anyhoo er pointen, at du slipper for dit måneds-array.
Avatar billede dotcom1 Nybegynder
25. august 2005 - 17:43 #7
--> Jaw: Denne her:
$danskTid = (int)strftime("%d", $fetch['unixtid']) . strftime(". %b %Y", $fetch['unixtid']);
Skal den sættes i stedet for
echo "<p class=\"date\">" . stripslashes($data['thisDate']) . "</p>\n";
Avatar billede jaw Nybegynder
25. august 2005 - 17:46 #8
Både og, men det skal nok være:
echo "<p class=\"date\">" . $danskTid . "</p>\n";
Avatar billede jaw Nybegynder
25. august 2005 - 17:48 #9
Og hov, linien skal selvfølgelig være:
$danskTid = (int)strftime("%d", $fetch['thisDate']) . strftime(". %b %Y", $fetch['thisDate']);  (og ikke unixtid.

Og så kan du lige teste både %B og %b, for jeg ved ikke lige helt hvad du leder efter.
Avatar billede dotcom1 Nybegynder
25. august 2005 - 17:54 #10
Grr. Den vil kun vise datoen 1. jan 1970. Har jeg gjort noget forkert? Du får lige hele min funktion her:

function getComments($postNo)  {
    setlocale(LC_TIME, 'danish');
    $danskTid = (int)strftime("%d", $fetch['thisDate']) . strftime(". %b %Y", $fetch['thisDate']);
    $comments = executeSQL("SELECT name, email, comment, URL, UNIX_TIMESTAMP(theDate) as thisDate FROM comments WHERE postNo = '" . $postNo . "' ORDER BY theDate");
    //hvis der ikke er nogen kommentarer kører løkken ikke
    while ($data = mysql_fetch_array($comments))  {
        $comment = stripslashes($data['comment']);
        $comment = nl2br($comment);
      echo "<div class=\"box\">\n";
      echo "<p class=\"date\">" . $danskTid . "</p>\n";
      echo "<p>" . $comment = url2link($comment) . "</p>";
      echo "<span class=\"small\">Skrevet af</span><span class=\"titel\"><b>" . stripslashes($data['name']) . "</b></span>\n";
      if ($data['email'] != "") {
        echo "  &nbsp;| <a class=\"plain\" title='Email' href=\"mailto:" . $data['email'] . "\">&nbsp;@&nbsp;</a>\n";
      }
      if ($data['URL'] != "") {
     
        echo " | <a class=\"plain\" title='Website' href=\"" . $data['URL'] . "\">&nbsp;www&nbsp;</a>\n";
      }
      echo "</div><br />\n\n";
    }
  }
Avatar billede jaw Nybegynder
25. august 2005 - 18:01 #11
Du skal lige have strftime()-linien lidt længere ned:

Så prøv:
function getComments($postNo)  {
    setlocale(LC_TIME, 'danish');
    $comments = executeSQL("SELECT name, email, comment, URL, UNIX_TIMESTAMP(theDate) as thisDate FROM comments WHERE postNo = '" . $postNo . "' ORDER BY theDate");
    //hvis der ikke er nogen kommentarer kører løkken ikke
    while ($data = mysql_fetch_array($comments))  {
        $danskTid = (int)strftime("%d", $fetch['thisDate']) . strftime(". %b %Y", $fetch['thisDate']);
        $comment = stripslashes($data['comment']);
        $comment = nl2br($comment);
      echo "<div class=\"box\">\n";
      echo "<p class=\"date\">" . $danskTid . "</p>\n";
      echo "<p>" . $comment = url2link($comment) . "</p>";
      echo "<span class=\"small\">Skrevet af</span><span class=\"titel\"><b>" . stripslashes($data['name']) . "</b></span>\n";
      if ($data['email'] != "") {
        echo "  &nbsp;| <a class=\"plain\" title='Email' href=\"mailto:" . $data['email'] . "\">&nbsp;@&nbsp;</a>\n";
      }
      if ($data['URL'] != "") {
     
        echo " | <a class=\"plain\" title='Website' href=\"" . $data['URL'] . "\">&nbsp;www&nbsp;</a>\n";
      }
      echo "</div><br />\n\n";
    }
  }
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:05 #12
Det hjalp desværre ikke. Stadig 1. jan 1970. Klokken mangler forresten også.
Avatar billede fixxxer Nybegynder
25. august 2005 - 18:08 #13
dotcom1 > kasserede du min løsning?
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:08 #14
Dato-feltet i databasen er af typen: `theDate` datetime default NULL, - hvis det har nogen betydning...
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:12 #15
--> fixxer: Med din løsning for jeg ingen måned... kun 25. 2005 kl. 15:16:04
Avatar billede jaw Nybegynder
25. august 2005 - 18:12 #16
Ah, ved jeg godt tror jeg, der er en variabelfejl:

$danskTid = (int)strftime("%d", $data['thisDate']) . strftime(". %b %Y", $data['thisDate']); (og ikke $fetch)
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:15 #17
Har afsat flere points.

Jep, så var den der! Mangler bare lige klokken... :)
Avatar billede jaw Nybegynder
25. august 2005 - 18:16 #18
Og hvis du så lige vil have tidspunktet med også, så er det :

    $danskTid = (int)strftime("%d", $data['thisDate']) . strftime(". %b %Y", $data['thisDate']) . " kl. " . strftime("%H:%M:%S", $data['thisDate']);

:)
Avatar billede fixxxer Nybegynder
25. august 2005 - 18:18 #19
$danskTid = (int)strftime("%d", $data['thisDate']) . strftime(". %b %Y kl.  %H:%M:%S", $data['thisDate']); (og ikke $fetch)
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:19 #20
Perfectos! Læg et svar. :)
Avatar billede jaw Nybegynder
25. august 2005 - 18:20 #21
Godt :) Og takker...
Avatar billede dotcom1 Nybegynder
25. august 2005 - 18:23 #22
Takker for hjælpen.
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