Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo, es hilft leider nichts. Aber ich brauch nochmal hilfe.

In einem anderen Thread ging es um die Sortierung nach Datum. Dabei gings dann um die Datumformat-Umwandlung mit folgendem Konstrukt:

Ausgangsformat: TT.MM.JJJJ Zielformat JJJJ-MM-TT


$pattern='/(\d.*?).(\d.*?).(\d.*?)$/';
$replace='$3-$2-$1';
$ta = strtotime(preg_replace($pattern,$replace,$a[0]));
$tb = strtotime(preg_replace($pattern,$replace,$b[0]));
[/PHP]

das $pattern hab ich versucht zu verstehen, aber ich schaff es einfach nicht.

Müsste man zwischen den Klammern die Punkte nicht so notieren \.

Die Konstellation mit *? kapier ich auch nicht.

Meine Gedanken prodzuieren das da:

'/(\d.\d)\.(\d.\d)\.(\d\d)/'

bzw:

'/^(\d.\d)\.(\d.\d)\.(\d\d)$/'

Geschrieben

http://www.dclp-faq.de/q/q-regexp-bauelemente.html

Also, wie du siehst, wird das komplette $pattern von /'s umschlossen. Damit markierst du das eigentliche Pattern. Fast am Ende das $ markiert, daß nach dem Vorhergehenden nichts mehr kommt, also das Zeilenende.

Nun besteht das Pattern aus drei gleichartigen Klammern, getrennt durch jeweils ein beliebiges Zeichen (nicht den Punkt!). Die Klammern selbst beinhalten eine dezimale Zahl, nämlich beliebig viele Dezimalziffern \d.*. Man könnte auch [0-9]* schreiben. Das Fragezeichen dahinter drückt aus, daß er sowenig wie möglich nehmen soll, erklärt ist das am besten hier.

Dein Ansatz ist im Prinzip nicht schlecht, nur teilweise etwas falsch (\d.\d), bei der Jahreszahl auf zwei Stellen beschränkt und setzt den Punkt als Trenner zwischen den Datumsteilen voraus.

Geschrieben

also meine version von oben nochmal von mir überarbeitet:

'/(\d\d)\.(\d\d)\.(\d\d)/'

bzw:

'/^(\d\d)\.(\d\d)\.(\d\d)$/'

ach ja ich hab in mehreren Beispielen gesehen, dass bei strtotime als input immer ein Format wie dieses benutzt wurde:

strtotime("22 December 2001")

Aber es geht anscheinend auch mit JJJJ-MM-TT und auch mit JJ-MM-TT

Ist das Zufall oder gewollt? Was ist sauberer?

Geschrieben
also meine version von oben nochmal von mir überarbeitet:

'/(\d\d)\.(\d\d)\.(\d\d)/'

bzw:

'/^(\d\d)\.(\d\d)\.(\d\d)$/'

ach ja ich hab in mehreren Beispielen gesehen, dass bei strtotime als input immer ein Format wie dieses benutzt wurde:

strtotime("22 December 2001")

Aber es geht anscheinend auch mit JJJJ-MM-TT und auch mit JJ-MM-TT

Ist das Zufall oder gewollt? Was ist sauberer?

sauber ist es mit Timestamps zu arbeiten und diese bei der Ausgabe zu formatieren!

Geschrieben
sauber ist es mit Timestamps zu arbeiten und diese bei der Ausgabe zu formatieren!

Bei mir gibt aber der Benutzer ein Datum ein. Dem möchte ich sein gewöhnliches Format aber lassen, somit muss ich solche Eingaben auch erst umformatieren.

Wenn ich jetzt davon ausgehe, dass in meinem String immer nur das Datum steht, dann brauch ich das ^ und das $ eigentlich nicht oder?

Geschrieben

schon, ist aber schlecht. Du mußt bei Benutzereingaben immer von schlimmsten ausgehen. Wenn du allerdings das mit strtotime() generierte Datum auf Gültigkeit überprüfst, kannst du ja schon feststellen, ob sich der User vertippt hat und ihn darauf hinweisen.

Geschrieben

in meinem speziellen fall kann der user sich nicht vertippen. In dem html Formular hat er listboxen von 1-31 und 1-12 und 2004-20030 danach mache ich das in das richtige format. Und wenn er 31.02.2005 eintippt, dann ist er selber schuld.

Geschrieben
in meinem speziellen fall kann der user sich nicht vertippen. In dem html Formular hat er listboxen von 1-31 und 1-12 und 2004-20030 danach mache ich das in das richtige format. Und wenn er 31.02.2005 eintippt, dann ist er selber schuld.

du könntest mit JavaScript auch noch die Selectboxen in abhängigkeit des Jahrs und Monats beeinflussen.

d.h. wenn dein user den Monat Februar im Jahr 2005 auswählt, ist der maximalwert im Tag Feld 28, wenn er aber ein schaltjahr wählt, nimmst du den maximalwert 29 an, bei allen anderen Monaten 30 bzw 31 Tage

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