Problem med TIMESTAMP, mysql

Tråden skapades och har fått 18 svar. Det senaste inlägget skrevs .
1

Tjena!

Har lite problem med TIMESTAMP, är total nybörjare på mysql/php så ha lite tålamod med mig

Jag skriver till databasen med ett formulär som sätter ett timestamp på varje post. När jag sen vill ta ut timestampet och visa på sidan så ser det ju lite tråkigt ut. tex: 20051128105314.

Hur formaterar jag det att blir lite snyggare?

Koden som skriver ut de nu är bara en $datum, som postar hela timestampet..

<?php
   // listing script
   
   // connect to the server
   mysql_connect( 'localhost', 'root', '' )
      or die( "Error! Could not connect to database: " . mysql_error() );
   
   // select the database
   mysql_select_db( 'rajraj' )
      or die( "Error! Could not select the database: " . mysql_error() );
   
   // retrieve all the rows from the database
   $query = "SELECT * FROM `journal` ORDER BY `id` DESC";
      
   $results = mysql_query( $query );

   // print out the results
   if( $results )
   {
      while( $contact = mysql_fetch_object( $results ) )
      {
         // print out the info
         $id = $contact -> id;
         $datum = $contact -> datum;
         $rubrik = $contact -> rubrik;
         $innehall = $contact -> innehall;
         echo( "$datum<br><br>$rubrik<br><br>$innehall<br><br>" );
      }
   }
   else
   {
      die( "Trouble getting data from database: " . mysql_error() );
   }
   
?>

Men, det där är väl inte de jag behöver? Eller? Jag har ju redan datumet i databasen, och när det skrivs ut så blir det som det blir.. kan jag formatera den strängen med php's Date()? Hur?

t.ex.
$snyggtdatum = date("Y-m-d H:i",$timestampmysql);
echo $snyggtdatum;

Då ser det ut så här:
2005-11-27 11:38

Allt hittar du här med:
sv.php.net skriv sedan date i sök rutan upp till höger.

Ursprungligen av Mattias Hedman:

Allt hittar du här med:
sv.php.net skriv sedan date i sök rutan upp till höger.

Den här länken fungerar lite bättre: se.php.net

Ursprungligen av Jesper Ohlsson:

Den här länken fungerar lite bättre: se.php.net

Ja ja....

Ah! Är hemma på lunch nu, ska testa när ja kommer tebax till jobbet

Annan fråga.. Jag lagrar text med TEXT, varchar räckte inte till, Men när jag skriver in i en textarea och delar upp texten i stycken så kommer endast översta stycket med.. Hur kommer det sig?

Hrm.. Jag får det inte att fungera.

Jag ändrar:

{
         // print out the info
         $id = $contact -> id;
         $datum = $contact -> datum;
         $rubrik = $contact -> rubrik;
         $innehall = $contact -> innehall;
         echo( "$datum<br><br>$rubrik<br><br>$innehall<br><br>" );
      }

till:

{
         // print out the info
         $id = $contact -> id;
         $fintdatum = $contact -> date("Y-m-d H:i",$datum);


         $rubrik = $contact -> rubrik;
         $innehall = $contact -> innehall;
         echo( "$datum<br><br>$rubrik<br><br>$innehall<br><br>" );
      }

Då får jag endast:

Fatal error: Call to undefined function: date()
  • Medlem
  • Kiruna
  • 2005-11-28 12:36

PHP:s inbyggda funktion 'date' kan du inte använda direkt som en metod till ditt objekt, $contact.

Så här får det se ut:

$fintdatum = date("Y-m-d H:i",$contact->datum);

För att ytterligare krångla till det tar PHP:s 'date'-funktion som andra parameter ett TIMESTAMP, dvs antalet sekunder sedan Epoch (1970-01-01 00.00.00 GMT). Det verkar inte som att du hämtar ett TIMESTAMP från databasen, utan en datumsträng.

Använd MySQL:s funktion UNIX_TIMESTAMP(date) för att returnera rätt datatyp. Alternativt kan du använda funktionen DATE_FORMAT(date,format) för att direkt hämta en riktigt formatterad datumsträng från databasen.

(Att det är bökigt beror som vanligt på att MySQL krånglar till det, i det här fallet med deras definition av TIMESTAMP.)

Senast redigerat 2005-11-28 12:52

Tack! verkar nästan fungera.. Datumet blir fint, men det blir fel datum.. inte de datum som finns i min timestamp..

edit: alla datum blir samma också: 2038-01-19 04:14

Aah.. så jag får byta min TIMESTAMP till UNIX_TIMESTAMP i mysql?
Nä.. så verkade det inte vara vid lite efterforskning.. Kanske är de i SELECT satsen man ska laborera med UNIX_TIMESTAMP?

Men alltså.. total rookie som jag är på detta.. vad exakt är det jag ska göra??

  • Medlem
  • 2005-11-28 13:10

$query = SELECT UNIX_TIMESTAMP(datum), etc etc
...
$datum = date("Y-m-d", $datum)

Annars, lite enklare men kanske inte lika snyggt sätt;
-Gör datum till en unsigned int i databasen.
-Spara aktuell tid med php-metoden time()
-Datum-int:en du sedan få från databasen kan köras direkt i php-metoden date()

Nu drar jag mitt hår..

"SELECT UNIX_TIMESTAMP(datum) FROM `journal` ORDER BY `id` DESC LIMIT 2";
--
$fintdatum = date("Y-M-d",$contact->datum);

Ger: 1970-Jan-01
Nu har jag rest bakåt i tiden istället för frammåt...
Hur får ja de att stämma?

  • Medlem
  • Kiruna
  • 2005-11-28 14:21

Jag tror du glömmer att ge kolumnen ett namn:

SELECT UNIX_TIMESTAMP(datum) as datum FROM...

Om du inte gör det kommer kolumnen att heta just 'UNIX_TIMESTAMP(datum)' istället för 'datum', och då kommer du ju inte åt den med $contact->datum...

  • Medlem
  • 2005-11-28 14:19

"1970-Jan-01" tyder på att du får 0, null eller något annat tråkigt värde från $contact->datum.

Det kan vara så att UNIX_TIMESTAMP(datum) inte automatiskt skapar en post med namnet datum, resultat av funktioner får speciella namn. Testa "UNIX_TIMESTAMP(datum) AS datum2" och sedan "$contact->datum2" om det blir någon skillnad.

Hrm.. jag lägger till de du skriver ovan, men jag får ingen skillnad på outputten på sidan..
rättare sagt så blir de ingen output alls.

"SELECT UNIX_TIMESTAMP(datum) AS datum2 FROM `journal` ORDER BY `id` DESC LIMIT 2";
--
$datum = $contact -> datum2;

Ok.. jag är förvirrad.

Nu gjorde jag såhär:
"SELECT UNIX_TIMESTAMP(datum) AS datum FROM `journal` ORDER BY `id`";
--
$datum = $contact -> datum;

Då får jag inget output alls. Men kollar jag i phpmyadmin tex så har jag "20051128133819" i datum-fältet på ett av id'arna.

Jaaa!! Länge leve mig själv! (Och alla trevliga macmänniskor som hjälpt mig i denna tråd)

Lyckades nu haxa till de o få rätt datum utskrivet med hjälp av ändring till DATETIME på datum-kolumnen, sen stoppa in datumet i kolumnen med Now(), och ta ute det rakt av..

Jippie!

1
Bevaka tråden