Zum Inhalt springen

PHP Datumsformat


Empfohlene Beiträge

Guden...

Ja, ich hab die Forumsuche benutzt aber nicht so recht das gefunden was ich eigentlich gesucht hab. Bin also auf eure Hilfe angewiesen. :)

Es geht um die Formatierung des Datums in PHP:

Ich hab eine Fotogalerie in PHP geschrieben, die zuerst alle Events auflistet, also n kurzer Text und ein Bilder da Galerie. Wenn man darauf klickt kommen dann alle Fotos des jeweiligen Events.

Erstellt werden die Events und Galerien automatisch, also durch ein Formular in denen ich die Eventdaten und die Ordner der Bilder eingebe.

Jetzt mein eigentliches Problem:

Wenn ich den Event in mein Formular eintrage kann ich auch das Datum eingeben, wann der Event war. Wenn ich nun die Events auflisten lasse (nach Datum sortiert) kommen die Events in falscher Reihenfolge.

In meiner MySQL-DB (wo die Events liegen) ist das Format INT (für das Datum), daher wird dann z.b. der 23.12.2003 nach dem 10.05.2003 aufgelistet, weil eben die 1 von 10 kleiner ist als die 2 von 23 :(

Wie kann ich also mein Datum so aus dem Formular auslesen/formatieren, dass daraus ein für die DB gültiges Datumsformat wird und ich die Events so sortieren kann, dass immer der Event mit dem neuesten Datum oben ist?

Dazu muss man auch berücksichtigen dass ich evtl. ältere Events später nachträglich einfügen will, d.h. im Jahr 2004 einen Event der Anfang 2003 war... z.b. ?!?

Vielen Dank schon mal

P.S.: Bisher hab ich die Events nach "ID" in der DB sortiert, also der am neuesten eingetragene ganz oben, ist aber nicht ganz so im Sinne des Erfinders, als meines Sinnes :D

Wer sich mal ein Bild davon machen will: klick

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich persöhnlich finde es schöner mit einem UNIX-Timestamp zu arbeiten,

da dieser auch in jede php funktion verwendet werden kann z.b. date();

mysql timestamp muss man immer erst mit substr zerschneiden,....

einfach nen int(12) feld in die db und da ein UNIX-Timestamp rein

näheres siehe mktime();

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Ja, aber er arbeitet ja mit aktuellen Fotos.

Also wie bereits gesagt wurde:

Datenfeld vom Typ INT in deiner DB und dieses als UNIX-Time benutzen. Damit kannst du auch einfacher Zeiten berechnen.

Deine Datumsangabe kannst du ja mittel RegEx parsen und dann mit mktime() in Sekunden umwandeln:


if (preg_match("/((\d){1,2}\.(\d){1,2}\.(\d){2,4}/",$eingabe,$match)) {
$time=mktime(0,0,0,$match[2],$match[1],$match[3]);
}
[/PHP]

Du brauchst dann in der ORDER-Klausel der SQL-Abfrage nur noch DESC angeben und schon hast du den wirklich aktuellen Eintrag zuerst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Datenfeld vom Typ INT in deiner DB und dieses als UNIX-Time benutzen. Damit kannst du auch einfacher Zeiten berechnen.

Datenfeld als Typ INT? Wie eigentlich nicht gleich vom TYP TIMESTAMP?

Andererseits gibt es auch noch den Datenfeldtyp DATE, welcher ein Datum im Format YYYY-MM-DD ablegt und auch sortieren kann. So bleiben zumindest manuelle Eingriffe in die DB einfach.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn es in der Datenbank als INT gespeichert ist, ist dass in dem Sinn ja kein Datum, sondern die Anzahl der Sekunden, die seit dem 1.1.1970 verstrichen sind.

Demnach ist der 23.12.03 schon später als der 02.07.03.

Ich persönlich arbeite auch lieber mit INT als mit TIMESTAMP, weil man damit nur schwer rechnen kann.

Wenn du dir die Daten aus MySQL holst, probiers doch mal mit "ORDER BY date" ind dem Select, vielleicht liegt es ja einfach nur daran, dass deine Events nicht in der chronologischen Reihenfolge in der DB stehen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 6 Monate später...

Ich habe in meiner DB ein datum als Typ date liegen, also nach yyyy-mm-dd

aber irgendwie bekomm eich die Ausgabe nicht formatiert :(


$a_row[datum] = date ($a_row[datum],'m-y');
print "$a_row[datum]";
[/PHP]

Ich bekomme zwar das Datum zu sehen, aber ich will nur Monat und Jahr ausgegeben haben (geht um die Anzeige der Erstzulassung)

2-helpless

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zum einen gibst Du die falschen Parameter für die Funktion date an.

http://www.selfphp.info/funktionsreferenz/datums_und_zeit_funktionen/date.php

Zum anderen brauchst Du ein Timestamp um daraus ein Datum zu formatieren.

Das könntest Du auch per MySQL machen.

select date_format(datum, '%m-%y') as datum from ....

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

also ich arbeite mit folgendem Prinzip bei einem Datum:

In der Datenbank speichere ich das Datum im int Typ und im Format YYYYMMDD. Also zuerst das Jahr, dann Monat und dann Tag. Das ganze lässt sich prima sortieren. Wenn ich das aktuelle Datum speichern möchte nehme ich date(Ymd) und wenn ich das Datum korrekt formatiert ausgeben möchte, hab ich dafür eine kleine Funktion (z.B. aus 20040725 wird dann 25.07.2004).

Gruß Daniel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

also ich arbeite mit folgendem Prinzip bei einem Datum:

In der Datenbank speichere ich das Datum im int Typ und im Format YYYYMMDD. Also zuerst das Jahr, dann Monat und dann Tag. Das ganze lässt sich prima sortieren. Wenn ich das aktuelle Datum speichern möchte nehme ich date(Ymd) und wenn ich das Datum korrekt formatiert ausgeben möchte, hab ich dafür eine kleine Funktion (z.B. aus 20040725 wird dann 25.07.2004).

Gruß Daniel

das ist nichts anderes als die standard vorgehensweise von MYSQL-Timestamps

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

TIMESTAMP ist dazu da Veränderungen an Datensätzen zu registrieren.

DATETIME bzw. DATE sollte man für Datumswerte nehmen mit denen man arbeiten will, es gibt so viele schöne Datenbankfunktionen für Datumswerte. ;)

Einen eigenen timestamp in einem INT zu speichern, klappt zwar, kann aber zu Problemen führen.

Und bitte auf keinen Fall sowas machen.

http://forum.fachinformatiker.de/showpost.php?p=587701&postcount=253 :rolleyes:

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

TIMESTAMP ist dazu da Veränderungen an Datensätzen zu registrieren.

DATETIME bzw. DATE sollte man für Datumswerte nehmen mit denen man arbeiten will, es gibt so viele schöne Datenbankfunktionen für Datumswerte. ;)

richtig, so gehe ich das ganze auch immer an ;)

Und bitte auf keinen Fall sowas machen.

http://forum.fachinformatiker.de/showpost.php?p=587701&postcount=253 :rolleyes:

Gruß Jaraz

hm ich sag ma: "Pech gehabt" ;P

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...