Brei Geschrieben 3. September 2004 Geschrieben 3. September 2004 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)$/' Zitieren
kLeiner_HobBes Geschrieben 3. September 2004 Geschrieben 3. September 2004 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. Zitieren
Brei Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 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? Zitieren
kLeiner_HobBes Geschrieben 3. September 2004 Geschrieben 3. September 2004 wenn, dann '/(\d\d)\.(\d\d)\.(\d{2,4})$/' da du ja auch vierstellige Jahreszahlen angeben könntest. strtotime nimmt so einige Formate. Zitieren
kills Geschrieben 3. September 2004 Geschrieben 3. September 2004 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! Zitieren
kLeiner_HobBes Geschrieben 3. September 2004 Geschrieben 3. September 2004 sauber ist es mit Timestamps zu arbeiten und diese bei der Ausgabe zu formatieren! 100% ACK! Da kann man auch einfach Differenzen errechnen, vergleichen, etc... Zitieren
kills Geschrieben 3. September 2004 Geschrieben 3. September 2004 100% Ack! Ack? Whats dats denn für ne Abkürzung? :-) Zitieren
kLeiner_HobBes Geschrieben 3. September 2004 Geschrieben 3. September 2004 http://www.gaarde.org/acronyms/ Acknowledge = Einverständnis Wird IMHO auch beim TCP-Protokoll verwendet, wenn eine Verbindung aufgebaut wird (SYN/ACK) Zitieren
Brei Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 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? Zitieren
kLeiner_HobBes Geschrieben 3. September 2004 Geschrieben 3. September 2004 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. Zitieren
Brei Geschrieben 3. September 2004 Autor Geschrieben 3. September 2004 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. Zitieren
kills Geschrieben 6. September 2004 Geschrieben 6. September 2004 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 Zitieren
Empfohlene Beiträge
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.