Avatar billede jokeren25 Nybegynder
19. maj 2006 - 10:05 Der er 2 kommentarer og
1 løsning

Sql datovisning problem

Hej eksperter,

jeg har et problem i det jeg ikke kan få en dato til at blive vist korrekt.

Min sql ser på nuværende tidspunkt således ud;

<?
      $sqlstr = "SELECT * FROM NewsEvent WHERE StatusFlag='1' AND (CURDATE()>=OnlineDate AND CURDATE()<=OfflineDate) ORDER BY ListOrder";
      $res = mysql_query($sqlstr);
      while ($list_data=mysql_fetch_array($res)){
            $EventDateFrom = FormatDatetime($list_data[EventDateFrom]);
            $EventDateEnd = FormatDatetime($list_data[EventDateEnd]);
            $Title = $list_data[Title];
            $Place = $list_data[Place];
            $EventDesc = nl2br($list_data[EventDesc]);
            $EventImage = ResizeImage("news",GetString($list_data[EventImage],"white.gif"),"200","150");
            $EventMMO = GetString($list_data[EventMMO],"");
      ?>

Dato'en vises: 06-01-2006 til 06-01-2006. Jeg vil gerne have den til at vise 01-06-2006 i stedet. I phpMyadmin ser min dato således ud: 2006-06-01 00:00:00.

Her skriver den dato'en ud:
<?
            if ($EventDateEnd!="") {
                echo "$EventDateFrom til $EventDateEnd";
            }else{
                echo $EventDateFrom;
            }
?>
Avatar billede mrgumble Nybegynder
19. maj 2006 - 10:19 #1
Jeg tror du skal have rettet lidt i din SQL. Fordi MySQL arbejder med dato som strenge (20060519 10:14:50) mens php bruger Unixtimestamp, dvs. antal sekunder siden 1970. Derfor skal du i din SQL have den til at konvertere din dato til unixtime-format. Derfor:
SELECT Title, Place, UNIX_TIMESTAMP(EventDateFrom) as EventDateFrom, UNIX_TIMESTAMP(EventDateEnd) as EventDateEnd, ... FROM NewsEvent ...

Derudover kunne man kigge på din FormatDatetime funktion. Er det en du selv har lavet?  Men prøv at erstatte FormatDatetime(...) med:
$EventDateFrom = date('m-d-Y', $list_data['EventDateFrom']);

Tilsidst, når du henter data fra $list_data, skal du sørge for at det sker rigtigt:
$list_data[EventDateFrom]; // Denne går ud fra, at der er en konstant der hedder EvenDateFrom og bruger dens værdi.
$list_data['EventDateFrom']; // Denne bruger strengen EventDateFrom...
Avatar billede jokeren25 Nybegynder
19. maj 2006 - 11:50 #2
Det er et system jeg har fået overdraget så jeg er ved at finde hoved og hale på det. Funktionen FormatDatetime ser således ud;

function FormatDatetime($dt_str){
    if(isset($dt_str)){
        if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $dt_str, $regs ) ) {
            $dt_str = $regs[1]."-".$regs[2]."-".$regs[3];
            if ($dt_str=="1900-01-01"||$dt_str=="2100-01-01"){$dt_str="";}
        }
    }
    return $dt_str;
}

Er det muligt at redigere i funktionen for at få den til at vise det rigtige dato format?
Avatar billede mrgumble Nybegynder
19. maj 2006 - 12:52 #3
Din FormatDatetime er en stor omvej. Brug i stedet date()-funktionen som jeg beskrev længere oppe. Den er nemlig så smart, at du selv bestemmer 100% hvordan datoformatet returneres. Den kræver blot, at datoen du sender til den er i timestamp, så du skal huske at konvertere SQL-data (se mit forrige svar).
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