Konvertera datumformat
13 svar · 400 visningar · startad av aztek
Använd mysql-funktionen UNIX_TIMESTAMP() när du hämtar datan ifrån databasen, t ex:
SELECT UNIX_TIMESTAMP(kolumnnamnet) AS tid FROM databasen
Sedan använder du php-funktionen date() såhär:
date("F j, Y - H:i", $timestamp);
där $timestamp är resultatet ifrån sql-satsen.
Hur menar du med "AS tid"? Vad är tid?
Skrev det såhär
$timestamp = mysql_query('SELECT UNIX_TIMESTAMP(datum) AS tid FROM showlist') or die (mysql_error());
men får fram datumet January 1, 1970 - 01:00
Så här t ex:
$result = mysql_query('SELECT UNIX_TIMESTAMP(datum) AS tid FROM showlist') or die (mysql_error());
while($row = mysql_fetch_array($result)){
echo date("F j, Y - H:i", $row['tid']);
}
Glöm inte att ansluta till mysql, och välj databas.
Nu känner jag mig riktigt förvirrad dessvärre. Börjar kännas som jag blandar ihop allt. Följande händer just nu:
...får inte rätt datum, fortfarande January 1, 1970 - 01:00
...min sql fråga plockar inte fram rätt datum, alltså det datum som är det närmsta att komma.
$idag = date("Y-m-d H:i:s");
$result = mysql_query('SELECT * FROM showlist WHERE datum > "$idag" ORDER BY datum LIMIT 1') or die (mysql_error());
$timestamp = mysql_query('SELECT UNIX_TIMESTAMP(datum) AS tid FROM showlist') or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
extract($row);
$dag = date("F j, Y - H:i", $row['tid']);
print "<tr valign=top><td colspan=2><b>Next Live Show: $dag $row[1]</b></td></tr><tr valign=top>";
Det ska enbart visas ett datum, det som är det näst följande, som sedan ska bytas ut med nästa när den dagen/tiden är slut.
Jag vet inte riktigt vad du vill göra, men du har iaf blandat ihop de två mysql-resultaten ($timestamp och $result):
$idag = date("Y-m-d H:i:s");
$result = mysql_query('SELECT * FROM showlist WHERE datum > "$idag" ORDER BY datum LIMIT 1') or die (mysql_error());
$timestamp = mysql_query('SELECT UNIX_TIMESTAMP(datum) AS tid FROM showlist') or die (mysql_error());
while ($row = mysql_fetch_array($timestamp)) {
extract($row);
$dag = date("F j, Y - H:i", $row['tid']);
print "<tr valign=top><td colspan=2><b>Next Live Show: $dag $row[1]</b></td></tr><tr valign=top>";
Jag tar det från början, känner att det kan vara det bästa.
Problem 1:
Jag har i min databas, showlist, ett fält som heter datum som är av typ datetime (ex 2003-04-06 19:00:00) där det lagras datumet för när en show kommer köras. Tanken är att man ska kunna lägga in hur många framtida shower som helst men endast den näst kommande ska visas på sidan, allltså den showen som är näst i tur att komma. Jag får inte detta att fungera, tar inte rätt show utan verkar ta den senast inlagda.
Problem 2:
När texten ska skrivas ut så ska datumet presenteras i formatet April 6, 2003 - 19:00, alltså inte som det ligger i databasen.
Så här ser koden ut just nu, finns säkert ton med fel.
$connection_show = mysql_connect($host,$user,$password) or die ("Kunde inte koppla upp mot MySQL servern\n". mysql_error());
mysql_select_db($db) or die(mysql_error());
$idag = date("Y-m-d H:i:s");
echo $idag;
$result = mysql_query('SELECT * FROM showlist WHERE datum > ". $idag ." ORDER BY datum LIMIT 1') or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
extract($row);
$dag = date("F j, Y - H:i", mysql_query("SELECT UNIX_TIMESTAMP(datum) AS tid FROM showlist"));
print "<tr valign=top><td colspan=2><b>Next Live Show: $dag $row[1]</b></td></tr><tr valign=top>";
if ($row[3] != NULL) {
print "<td width=160><img src=$row[3] class=news_pic></td><td><b></b><br><img src=img/empty.gif width=1 height=3<br>$row[1]<br>$row[2]</td>";
} else {
print "<td><b></b><br><img src=img/empty.gif width=1 height=3<br>$row[1]<br>$row[2]</td>";
}
print "</tr>";
}
mysql_close($connection_show);
Tack för all hjälp hittills.
Jag verkar ha löst det första problemet. Det skillde på enkel och dubbel (' "), ändrade om och nu funkar det.
$result = mysql_query("SELECT * FROM showlist WHERE datum > '.$idag.' ORDER BY datum LIMIT 1")
Testa det här:
$sql = "SELECT *, DATE_FORMAT(datum, '%M %e, %Y - %H:%I') as tid
FROM showlist WHERE datum > now() ORDER BY datum LIMIT 1";
$result = mysql_query($sql);
Jo det fungerar bra, men fortfarande får jag inte ut datumet rätt (Arpril 6, 2003 - xx:xx).
Ett litet i råkade visst bli ett stort I :)
Så här skulle det vara:
$sql = "SELECT *, DATE_FORMAT(datum, '%M %e, %Y - %H:%i') as tid
FROM showlist WHERE datum > now() ORDER BY datum LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
echo $row['tid'];
Läs mer om DATE_FORMAT i mysql-dokumentationen:
http://www.mysql.com/doc/en/Date_and_time_functions.html
Äntligen fick jag det att fungera som jag ville. Jag fick göra det med två SQL satser samt dela upp det hela och (vilket det visade sig) fick lägga datumutskriften med ett echo för att det skulle visas. Ändrade även F & j till M & d. Klistrar in koden nedan, om det nu är någon som är intresserad.
Tack så jättemycket alla ni som tog er tid att hjälpa mig, kände att jag var på väg att bli tunnhårig :)
$sql_2 = "SELECT *, DATE_FORMAT(datum, '%M %d, %Y - %H:%i') AS tid FROM showlist WHERE datum > now() ORDER BY datum LIMIT 1";
$result2 = mysql_query($sql_2);
$row2 = mysql_fetch_assoc($result2);
print "<tr valign=top><td colspan=2 bgcolor=dfdfdf><b>Next Live Show:</b> ";
echo $row2['tid'];
print " </td></tr><tr valign=top>";
mysql_free_result;
$sql_1 = "SELECT *, DATE_FORMAT(datum, '%M %d, %Y - %H:%i') AS tid FROM showlist WHERE datum > now() ORDER BY datum LIMIT 1";
$result = mysql_query($sql_1);
while ($row = mysql_fetch_array($result)) {
extract($row);
if ($row[3] != NULL) {
print "<td width=160><img src=$row[3] class=news_pic></td><td>$row[1]<br>$row[2]</td>";
} else {
print "<td>$row[1]<br>$row[2]</td>";
}
print "</tr>";
}
Det går att göra utan mysql med.
$date = date("F j, Y - g:i a");
och det ger tillexempel:
April 7, 2003 - 8:09 pm
För att få 0-23 timmar:
$date = date("F j, Y - G:i");
Vilket ger:
April 7, 2003 - 20:09