Avatar billede magsie Nybegynder
29. november 2005 - 09:46 Der er 19 kommentarer og
1 løsning

problemer med tids format

hej jeg har en mysql database hvor tiden ligger i formatet

yyyy-mm-dd

henter tiden til min php side med

date_format(date, '%d / %m / %Y')

hvilket fungere

--------

har saa forsoegt mig at benytte formateringen fra
http://au.php.net/date

ex
S and F

for at faa ex '2/10/2005' lavet om til 'the 2nd of October 2005'
ved at benytte koden
date_format(date, 'the %j%S of %F %Y')

det fungere ikke, og mit sp. er hvad jeg goer forkert?
Avatar billede reffo Nybegynder
29. november 2005 - 10:01 #1
Date_format har jeg aldrig lige set noget om, men kan da smide en alternativ løsning.

Du kan bruge http://www.php.net/mktime !

Den finder timestampet til din dato, og så bagefter kan du bruge date()
Avatar billede erikjacobsen Ekspert
29. november 2005 - 10:18 #2
Du kan hente det ud med

  SELECT UNIX_TIMESTAMP(ditdaofelt) AS ts ...

og så bruge date på feltet. Det er dog noget af en omvej, og så har man lidt bøvl med sommertid, sommetider. Jeg foretrækker at pille datoen fra hinanden med split eller regulære udtryk, og selv danne en pæn dato i en lille funktion.
Avatar billede magsie Nybegynder
29. november 2005 - 10:20 #3
ok det er to andre maader at goere det paa - men kan det virelig passe at man ikke kan aendre det i date_format... hvorfor er det saa en del af php.manualen?
og det fungere jo med den klasiske opbygning?
Avatar billede magsie Nybegynder
29. november 2005 - 10:21 #4
en anden ting er at min database indeholder mere end 600 entries, hvorfor det vil vaere temmelig besvaerlit hvis jeg manuelt skal gennemgaa hvert enkelt entry
Avatar billede hmortensen Nybegynder
29. november 2005 - 10:24 #5
date() er en PHP metode, DATE_FORMAT() er en mySQL metode, og vil derfor ikke være at finde i PHP manualen.
Avatar billede magsie Nybegynder
29. november 2005 - 10:27 #6
ahhh min fejl! vidste jeg ikke.
Avatar billede erikjacobsen Ekspert
29. november 2005 - 10:30 #7
Funktionen date_format i mysql er lidt et "misfoster". Databasen skal opbevare de "rå data", og det er programmeringen i grænsefladen (GUI-en), der skal bestemme hvordan data skal præsenteres.
Avatar billede kammeyer Nybegynder
29. november 2005 - 10:30 #8
reffo > date_format er fra MySQL.

Du skal bruge de formateringsmuligheder der findes i MySQL og ikke i PHP. Det er som at bruge vejledningen fra en Volvo til en Mercedes - ingen garanti for at det virker.

På denne side http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html står der en del om date_format's muligheder. Ellers må du trække datoen ud fra mysql som et "timestamp" og benytte det i PHP's date() funktion, hvor du kan bruge den streng du har skrevet ovenfor:

<?php
$sql = 'SELECT UNIX_TIMESTAMP( endato ) as endato FROM tabel';
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) > 0) {
  while ($row = mysql_fetch_assoc($res)) {
    echo date("\T\h\e jS of F Y", $row[endato]). "<br>";
  }
}
?>
Avatar billede magsie Nybegynder
29. november 2005 - 10:40 #9
jeg benytter en

  for($i=0;$i<count($resultat);$i++) {

til a opliste alle entries i databasen

skal det saa se ud som foelgende:

<?php
$sql = 'SELECT UNIX_TIMESTAMP( endato ) as endato FROM tabel';
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) > 0) {
  while ($row = mysql_fetch_assoc($res)) {
    date("\T\h\e jS of F Y", $row[endato]). "<br>";
  }
}
?>


..... paa datoen: <?php $row[endato] ?>


?
Avatar billede kammeyer Nybegynder
29. november 2005 - 10:49 #10
Jep - eksemplet virker - er testet.
Avatar billede magsie Nybegynder
29. november 2005 - 11:03 #11
faar ikke nogen dato ud....

her er hele koden
<?php
if(is_array($HTTP_GET_VARS)) {
  $start_nr = $HTTP_GET_VARS['start_nr'];
} elseif (is_array($_GET)) {
  $start_nr = $_GET['start_nr'];
}

if(!$start_nr || $start_nr < 0) {
  $start_nr = 0;
}

$sql_d = 'SELECT UNIX_TIMESTAMP(date) as endato FROM stops';
$res = mysql_query($sql_d);
if ($res && mysql_num_rows($res) > 0) {
  while ($row = mysql_fetch_assoc($res)) {
    date("\T\h\e jS of F Y", $row[endato]);
  }
}

$sql = "select id, sub, country FROM stops
ORDER BY date desc limit $start_nr, $antal_ad_gangen";
$taeller_sql = "select count(*) as antal FROM stops";

aabn_forbindelse_og_vaelgdb();
$resultat = sql_spoerg_og_faa_svar($sql);
$optaelling = sql_spoerg_og_faa_svar($taeller_sql);
luk_forbindelse();

extract($optaelling[0]);

if(count($resultat) < 1) {
  echo "no entries found";
} else {
  for($i=0;$i<count($resultat);$i++) {
    extract($resultat[$i]);
?>
    <center>
    <table width=100% cellpadding="0" cellspacing="0" border="0">
    <tr>
    <td width="40%" align="left"><?php echo "$row[endato]"; ?></td>
    <td width="20%" align="left"><?php echo "$country"; ?></td>
    <td width="40%" align="left"><?php echo "$sub"; ?></td></tr>
    </table>
    </center>

<?php
  }
}
?>





nogen der kan se hvorfor?
Avatar billede erikjacobsen Ekspert
29. november 2005 - 11:09 #12
print date("\T\h\e jS of F Y", $row[endato]);
Avatar billede magsie Nybegynder
29. november 2005 - 11:11 #13
under
$sql_d = 'SELECT UNIX_TIMESTAMP(date) as endato FROM stops';
$res = mysql_query($sql_d);
if ($res && mysql_num_rows($res) > 0) {
  while ($row = mysql_fetch_assoc($res)) {
    date("\T\h\e jS of F Y", $row[endato]);
  }
}


eller under
td width="40%" align="left"><?php echo "$row[endato]"; ?></td>


?
Avatar billede kammeyer Nybegynder
29. november 2005 - 11:51 #14
<?php
if(is_array($HTTP_GET_VARS)) {
  $start_nr = $HTTP_GET_VARS['start_nr'];
} elseif (is_array($_GET)) {
  $start_nr = $_GET['start_nr'];
}

if(!$start_nr || $start_nr < 0) {
  $start_nr = 0;
}

$sql = "select id, sub, country, UNIX_TIMESTAMP(date) as endato FROM stops
ORDER BY date desc limit $start_nr, $antal_ad_gangen";
$taeller_sql = "select count(*) as antal FROM stops";

aabn_forbindelse_og_vaelgdb();
$resultat = sql_spoerg_og_faa_svar($sql);
$optaelling = sql_spoerg_og_faa_svar($taeller_sql);
luk_forbindelse();

extract($optaelling[0]);

if(count($resultat) < 1) {
  echo "no entries found";
} else {
  for($i=0;$i<count($resultat);$i++) {
    extract($resultat[$i]);
?>
    <center>
    <table width=100% cellpadding="0" cellspacing="0" border="0">
    <tr>
    <td width="40%" align="left"><?php echo date("\T\h\e jS of F Y", $row[endato]); ?></td>
    <td width="20%" align="left"><?php echo "$country"; ?></td>
    <td width="40%" align="left"><?php echo "$sub"; ?></td></tr>
    </table>
    </center>

<?php
  }
}
?>
Avatar billede kammeyer Nybegynder
29. november 2005 - 11:53 #15
.... ret linien.....

<td width="40%" align="left"><?php echo date("\T\h\e jS of F Y", $row[endato]); ?></td>

til .... noget med

<td width="40%" align="left"><?php echo date("\T\h\e jS of F Y", $endato); ?></td>

har ikke brugt extract før, så jeg overså den ...
Avatar billede magsie Nybegynder
29. november 2005 - 11:58 #16
mange tak kammeyer - funger perfekt nu!

point givet
Avatar billede magsie Nybegynder
29. november 2005 - 12:01 #17
det eneste jeg ikke forstaar er hvorfor man ikke kan bruge

't' istedet for 'T' altsaa faa the istedet for The...

??
Avatar billede erikjacobsen Ekspert
29. november 2005 - 12:05 #18
date("\\t\h\e jS of F Y", $endato);
Avatar billede erikjacobsen Ekspert
29. november 2005 - 12:12 #19
Og så vil jeg fraråde brugen af extract. Skriv hellere hvor tingene kommer fra.  $resultat[$i]['endato'].

En dag får du et feltnavn i tabellen, der vil ødelægge een af de variabler du har i scriptet, og du får en fejl, der er svær at finde. Laver du fx et felt i tabellen, der hedder "i" går dit nuværende script ned.
Avatar billede magsie Nybegynder
29. november 2005 - 12:14 #20
ok det vil jeg kigge lidt paa senere

men rigtig mange tak for hjaelpen med dato
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