PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Datum mit $timestamp oder $date?


cellunatic
2005-09-23, 10:14:37
hallo!
2 fragen:
1) ich habe hier mir mit hilfe eines netten helfers ein php script für ne unterschriftenliste gebastelt. nun soll bei jedem benutzer der sich dort einträgt, das eintrage datum erscheinen. erst hatte ich es mit $datum=date("j.n.Y") versucht, allerdings ist mir dann aufgefallen, dass dieser befehl ja immer das aktuelle wieder gibt und nicht das eintrage datum. wie ist nun der befehl und wie bin ich ihn ein in mein script?
2) wenn ich die ausgabe tabelle dann hab, wie lasse ich ihn nach eintragedatum sortieren?

vielen dank für eure hilfe im voraus,
cellunatic

mithrandir
2005-09-23, 11:18:14
hm... Du speicherst das Eintragedatum zusammen mit dem Text in einer Datenbank-Tabelle?

Wanginator
2005-09-23, 12:54:49
Falls du mit einer mysql-Datenbank arbeitest, dann das Datum dort als timestamp abspeichern und beim lesen mit $datum=strftime("%d.%m.%Y",$deintimestamp) auslesen

Sortieren dann indem du z.b. die Datenbank sortiert nach den timestamps ausliest

Gandharva
2005-09-23, 13:17:22
generell zur thematik: http://de2.php.net/date

cellunatic
2005-09-23, 15:24:39
Falls du mit einer mysql-Datenbank arbeitest, dann das Datum dort als timestamp abspeichern und beim lesen mit $datum=strftime("%d.%m.%Y",$deintimestamp) auslesen

Sortieren dann indem du z.b. die Datenbank sortiert nach den timestamps ausliest

wie meinst du das, nach timestamps auslesen?
macht mensch das im myPHP admin? oder beim "insert ..."

Wanginator
2005-09-23, 15:37:31
das nach timestamps auslesen machst du in php, indem du dein mysql-Query anpasst, z.B.

$Query = "SELECT * from $TableName ORDER BY Datum ASC";

oder

$Query = "SELECT * from $TableName ORDER BY Datum DESC";

Edit: Für Datum dann entsprechenden Spaltennamen eintragen

cellunatic
2005-09-23, 15:53:22
das nach timestamps auslesen machst du in php, indem du dein mysql-Query anpasst, z.B.

$Query = "SELECT * from $TableName ORDER BY Datum ASC";

oder

$Query = "SELECT * from $TableName ORDER BY Datum DESC";

Edit: Für Datum dann entsprechenden Spaltennamen eintragen

ok cool, der befehl muss doch dann in die abfrage datei der tabelle rein oder? und an welcher stelle?
also meine abfrage datei sieht zur zeit so aus:

<?php
$seite = $_GET["seite"];

if(!isset($seite))
{
$seite = 1;
}


$verbindung = mysql_connect("localhost" , "tabellenname" , "******");
mysql_select_db("tabellenname");

$eintraege_pro_seite = 50;

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;


$abfrage = "SELECT name, nachname, country, datum FROM tabellenname";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))
{
echo "$row->datum - $row->name $row->nachname - $row->country <br>";
}
?>

mithrandir
2005-09-23, 16:18:53
Wie wär's hier:
$abfrage = "SELECT name, nachname, country, datum FROM tabellenname ORDER BY datum ASC";
Tomaten auf den Augen? Sooo viele Abfragen sind da ja nun nicht in dem Skript...

cellunatic
2005-09-23, 16:35:51
Wie wär's hier:
$abfrage = "SELECT name, nachname, country, datum FROM tabellenname ORDER BY datum ASC";
Tomaten auf den Augen? Sooo viele Abfragen sind da ja nun nicht in dem Skript...

ok habs ausprobiert. funktioniert aber trotzdem nicht, er gibt keinen fehler aus, allerdings ordnet er es trotzdem nicht?!

PatTheMav
2005-09-24, 00:59:11
Du kannst in der SQL-Tabelle sowohl Timestamps als INT oder richtig als TIMESTAMP speichern, als auch Felder als Typ "DATE" speichern, letzteres empfiehlt sich, wenn du wirklich nur das Datum haben willst, der Stamp empfiehlt sich, wenn du die genaue Zeit dazu haben willst.

Damit das funktioniert, musste das Datum Feld entsprechend mit nem Datentyp versorgen, dafür gibtes wie schon erwähnt drei Datentypen :

http://dev.mysql.com/doc/mysql/en/datetime.html

Timestamp eignet sich besonders bei tabellarischen Scriptaufgaben, weil es sehr genau das Datum auf die Millisekunde anzeigt, kann aber aufgrund des Datentyps nur Daten zwischen dem 1.1.1970 und 31.12.2037 anzeigen (danach gibts nen Overflow und der Timestamp fängt wieder bei Null mit einer abgeschnittenen eins ausserhalb des Wertebereichs an).

In deinem Fall bietet sich daher DATE oder DATETIME, beide speichern das Datum direkt als Nummernpaare ab in der Form :

DATE : YYYY-MM-DD
DATETIME YYYY-MM-DD HH:MM:SS

Damit hättest du schonmal ein Datumsfeld, mit dem die Datenbank auch durch das ORDER BY nach Datum auf- bzw. absteigend sortieren kann.

Nun kommen wir zum eintragen bzw. auslesen. MySQL erlaubt es dir, das Datum sowohl als String, als Reihe von Nummern in obigem Schema, als auch per SQL-Funktion "now()" einzutragen. Den PHP-Timestamp kannst nur als INT speichern, da Mysql das Datum laut Dokumentation nur in obigen (oder mit obig verwandten) Varianten annimmt und dann in das jeweils angegebene Format konvertiert.

Am einfachsten ist es also beim Eintragen folgendes in das SQL-Query mit aufzunehmen :

INSERT INTO tabellenname VALUES ([...],datum=NOW());

Dadurch wird zu dem Eintrag das aktuelle Datum mit aufgenommen.

Beim Auslesen mittels PHP bekommst dann das Datum meist als String, sortieren musst dann nicht mehr, das hat PHP schon gemacht (es gibt komplizierte Fälle wie Kalender, wo du Einträge aus mehreren Event-Tabellen bekommst und dann diese Events innerhalb von Arrays nochmal sortieren musst vor der Ausgabe), also explodest du den String einfach.

Hier mal DATE bzw. DATETIME aufgeführt :
DATE :
$the_date = explode(".", $result["datum"]);
print "Datum: ".$the_date[2].".".$the_date[1].".".$the_date[0];

DATETIME :

$the_date = explode(" ", $result["datum"]);
$the_date[0][] = explode(".", $the_date[0]);
$the_date[1][] = explode(":", $the_date[1]);

print "Datum: ".$the_date[0][2].".".$the_date[0][1].".".$the_date[0][0]." - ".
$the_date[1][0].".".$the_date[1][1].".".$the_date[1][2];Das wären jetzt aber Low-End Methoden, hab lange nicht mehr PHP programmiert, könnte sogar sein, daß es vorgefertigte Methoden gibt, die dir aus nem SQL-DATE nen String basteln, ähnlich wie date();

cellunatic
2005-09-24, 08:56:54
ok unerwarteterweise funktioniert der folgende tag doch, und springt nicht wie erwartet auf das jetzige datum.

$datum=date("j.n.Y");

--- alright nevermind: das mit DESC funktioniert ANSCHEINEND doch :|

fabnet2k
2005-09-29, 11:54:37
$date is immer verschieden auf timebasis nach brüssel ?