webForumDet fria alternativet

Konvertera datumformat

13 svar · 400 visningar · startad av aztek

aztekMedlem sedan feb. 200279 inlägg
#1

Har sökt runt bl.a här på Webforum samt läst på php.net men jag får det inte att fungera.

Jag har i min db ett fält som innehåller ett datum i format (2003-03-20 19:50:00). nu är det så att jag önskar skriva ut detta datum enligt följande: March 20, 2003 - 19:50. Hur göra?

dectgapMedlem sedan sep. 20021 542 inlägg
#2

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.

aztekMedlem sedan feb. 200279 inlägg
#3

Hur menar du med "AS tid"? Vad är tid?

aztekMedlem sedan feb. 200279 inlägg
#4

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

dectgapMedlem sedan sep. 20021 542 inlägg
#5

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.

aztekMedlem sedan feb. 200279 inlägg
#6

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.

dectgapMedlem sedan sep. 20021 542 inlägg
#7

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>";
aztekMedlem sedan feb. 200279 inlägg
#8

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.

aztekMedlem sedan feb. 200279 inlägg
#9

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")
MatteMedlem sedan aug. 20002 970 inlägg
#10

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);
aztekMedlem sedan feb. 200279 inlägg
#11

Jo det fungerar bra, men fortfarande får jag inte ut datumet rätt (Arpril 6, 2003 - xx:xx).

MatteMedlem sedan aug. 20002 970 inlägg
#12

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

aztekMedlem sedan feb. 200279 inlägg
#13

Ä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>";
		}
sneezeMedlem sedan dec. 2002802 inlägg
#14

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

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb