Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Du bytter om på å hente dato fra $rad[6] og $rad[5] ihvertfall, men det er kanskje riktig hvis du har endra skjema eller spørring ... ihvertfall er datofeltet deklarert med riktig datatype i mysql.

 

Hvis vi antar at du hele tiden bruker riktig kolonne, så forklarer ihvertfall gettype hvorfor date-funksjonen ikke forstår input. Du kan dissekere strengen og få en date ut av det med mkdate-funksjonen, men det er ikke riktig måte å gjøre det på.

 

Er du nødt til å bruke mysql_query &co? Det er utgått funksjonalitet som manualen anbefaler å styre unna.

Endret av quantum
Lenke til kommentar

Hei,

 

Kan du lage et lite eksempel på tabelloppsettet ditt på sqlfiddle.com ?

Hvis du kjører 'SHOW CREATE TABLE tabellnavn' vil du få ut CREATE statement som du kan lime inn i venstre side på sqlfiddle. Et par rader med data hadde også vært fint. Da er det mye lettere å hjelpe.

 

Selv ville jeg bare formatert datoene rett i SELECT kallet, slik som her, og lurer litt på hvorfor DATE_FORMAT ikke virker hos deg:

http://sqlfiddle.com/#!2/3b66b/1

Lenke til kommentar

Du må sjekke hvordan dato er lagret, date eller varchar. Som nevnt over så er det trolig ikke lagret som date. Prøv med hvis det er varchar:

Edit: Ser av bildene over at det er lagret som date, så DATE_FORMAT() skal fungere.

 

Lar denne stå, hvis man trenger å formatere dato som er lagret som varchar

SELECT DATE_FORMAT(STR_TO_DATE(column_name,'%Y-%m-%d'),'%d-%m-%Y')

 

Alternativt er å endre formatering i php etter på med bl.a. strtotime() eller mktime() og date()

echo date('d-m-Y',strtotime($rad[5]));

// alternativt
$xdate=explode('-',$rad[5]);
echo date('d-m-Y',mktime(0,0,0,$xdate[1],$xdate[2],$xdate[0]));

 

I eksemplet ditt lengre opp så er $rad[5] en streng og ikke en dato verdi, er derfor date('d-m-Y',$rad[5]) gir feil. Bruk

echo '<pre>';
print_r($rad);
echo '</pre>';
// eller
echo var_dump($rad[5]);

for å sjekke innhold. print_r() var_dump()

De fleste databaser er konfigurert til å formatere dato til en streng verdi ved oppslag, og ikke vise selve dato verdien som er ett tall.

 

Dette bør fungere

<table border="1">
<tr><td>Fagkode</td><td>Fagnavn</td><td>Tittel</td><td>Dato</td><td>Tid</td></tr>
<?php
include 'include/db_connect.php';
$sql= "SELECT cid, coursename, title, DATE_FORMAT(`date`,'%d-%m-%Y') `date`, DATE_FORMAT(`time`,'%k:%i') `time`
FROM deadline ORDER BY `Date`" ;
$resultat=mysql_query($sql);

while ($rad=mysql_fetch_assoc($resultat)) {
  echo '<tr><td>' . $rad['cid'] .
'</td><td>' . $rad['coursename'] .
'</td><td>' . $rad['title'] .  
'</td><td>' . $rad['date'] .
'</td><td>' . $rad['time'] .
'</td></tr>';
}
?>

Endret av Crowly
Lenke til kommentar

Jepp det fungerte :D

 

Men jeg har en liten spørsmål til. Har sett litt på sånn kalender opplegg. der du trykker på et ikon popper det opp en kalender også når du trykker på den datoen så blir den lagt inn. Er det mulig å bruke sånt hvis jeg legger en form?

Lenke til kommentar

Men jeg har en liten spørsmål til. Har sett litt på sånn kalender opplegg. der du trykker på et ikon popper det opp en kalender også når du trykker på den datoen så blir den lagt inn. Er det mulig å bruke sånt hvis jeg legger en form?

Se f.eks. http://jqueryui.com/datepicker/ eller http://webinsightlab...eb-development/ for flere forslag (ria frameworks).

 

Dette har forøvrig ingenting med databaser å gjøre så kanskje du får bedre svar hvis du poster her: http://www.diskusjon...hp?showforum=76

Endret av quantum
Lenke til kommentar

er det "normalt" at en date konverteres til string på vei opp fra databasen når man bruker php?

Har mest erfaring med mysql, oracle og litt "mssql" og ymse verktøy for å gjøre oppslag mot basen, f.eks. Sql*Plus (Oracle). Hvis man ikke spesifiserer noen formatering når man tar med ett dato felt, så får det en standard formatering, så regner med at det er forhånds definert. Kan selvfølgelig ta feil. Det har i alle fall ikke noe med php å gjøre.

Lenke til kommentar

Det har i alle fall ikke noe med php å gjøre.

Og ingen verdens ting med det jeg spurte om heller ... :wallbash:

 

Spørsmålet er hvorfor det som er en date i databasen kommer ut som en string når man henter det fra mysql_arrayen i php, og ikke f.eks. en integer som er den typen date-funksjonen forventer.

Lenke til kommentar

Det er faktisk det du spurte om

er det "normalt" at en date konverteres til string på vei opp fra databasen når man bruker php?

Hadde du skrevet

er det "normalt" at en date konverteres til string på vei opp fra databasen?

så er det mer generelt. Det er uansett små pirk.

 

Fant bl.a. dette for Oracle

Whenever a DATE value is displayed, Oracle will call TO_CHAR automatically with the default DATE format.

 

Vil tro at en date kommer som en standard string og ikke integer fordi null punktet og hvordan date verdien er lagret er forskjellig, at det da blir tryggere å konvertere til og fra string på tvers av systemer. I PHP er null punktet 01.01.1970, for "ms sql" så er det 01.01.1900 (pluss en bevist feil med skudd år for kompabilitet med Lotus 1-2-3 som hadde denne feilen først, 1900 er ikke ett skudd år), tror noen mac systemer bruker 01.01.1904 som null punkt, og man teller antall sekunder fra den datoen (andre teller muligens milli sekunder eller dager). Så hvis man bruker interger fra f.eks. "ms sql" direkte i php date() så blir det veldig feil.

  • Liker 1
Lenke til kommentar

Vil tro at en date kommer som en standard string og ikke integer fordi null punktet og hvordan date verdien er lagret er forskjellig, at det da blir tryggere å konvertere til og fra string på tvers av systemer.

Dette er det opp til databaseadapteren å gjøre riktig, ikke systemet. MySQL Connector for .NET returnerer en DateTime struktur, ikke en string.

Lenke til kommentar

Det er faktisk det du spurte om

Du må gjerne tolke spørsmålet helt fritt, men relevansen i det du skriver blir jo da litt ... skal vi si "tynn" :o)

 

Altså - databasen leverer fra seg et resultat over en eller annen protokoll, det kan f.eks . være tdm for mssql. Hva mysql gjør vet jeg ingenting om, men den gir tydeligvis fra seg typeinformasjon nok til at .net connectoren klarer å tolke det riktig, og det samme gjelder for jdbc-driveren.

 

Så spørsmålet er da om mangelen på dette i php er å regne som bug eller feature? Hva skjer med andre datatyper? Hva skjer om man bruker nyere adapter-rammeverk som ikke er deprecated (ref. php-manualens anbefalinger).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...