Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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();

Wenn du allerdings Daten aus der Vergangenheit berücksichtigen musst gibts mit dem Timestamp allerdings auch Grenzen. Bei Windows ist vo rdem 1.1.1970 und mit Unix/LInux ist vor 1.1.1900 Schluss.

  • 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.

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.

Ich würde auch einfach DATE verwenden, danach kann man super sortieren und es ist einfach umzuwandeln.

Beim INSERT einfach mit CURENT_DATE einfügen und beim select mit DATE_FORMAT(datum, "d.m.Y") direkt in einer vernünftigen Formatierumg ausgeben lassen.

http://www.mysql.com/doc/de/Date_and_time_functions.html

So gehts natürlich auch.

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...

  • 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

$ergebnis = date(strtotime($a_row["datum"]));

strtotime()

date()

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

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

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.