[php] Daten (TT.MM.YYYY) aus String auslesen und vergleichen

2TAKTER

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
399
Hi,
Ich habe zwei, hoffentlich kleine, Fragen:

1.)
Ich habe diverse Strings z.B.
PHP:
$str1 = "bla bla 03.12.2007";
$str2 = "bla 01.11.1999 bla";
$str3 = "bla bla 15.06.2010 blaa";

Aus diesen strings, welche ja immer unterschiedlich angeordnet sind, möchte ich gern die Datumsangaben auslesen.
kann ich irgendwie mit ereg() nach ??.??.???? suchen? Sind Platzhalter in ereg überhaupt möglich?

2.)
Gibt es eine php-Funktion, welche Daten (also Datumsangaben) miteinander vergleichen kann? Ich kann mir selbst was basteln aber warum kompliziert wenn es auch einfach geht? ;)

Danke im Voraus
 
Hallo 2TAKTER,

zu deinem ersten Problem kannst du dir ein regex schreiben was ca so aussieht ([0-9]2\.[0-9]2\.[0-9]4) .

Und bei deinem Zweiten problem kannst du die funktion mktime benutze. Die gibt dir die Unixzeit zurück die du wunderbar vergleichen kannst.

Grüße

tewes
 
Danke für die Hilfe

PHP:
$regex = "([0-9]2\.[0-9]2\.[0-9]4)";

if ( ereg($regex, $str1) )
	echo "ja";
else
	echo "nein";

Leider funktioniert das nicht so wirklich. Habe ich da was vergessen?

EDIT:
PHP:
$regex = "/^([0-9]2\.[0-9]2\.[0-9]4)$/";

if ( preg_match($regex, $str1) )

Hilft leider auch nicht.
 
Zuletzt bearbeitet:
Du musst ja auch die Buchstaben vor und nach den Datum "filtern".
PHP:
$regex = "/[A-Za-z]*([0-9]2\.[0-9]2\.[0-9]4)[A-Za-z]*/";
Das könnte eventuell klappen.
Ansonsten kannst du hier dein RegEx testen.

Grüße

tewes
 
mit dieser Funktion kannst du ein normales Datum in einen Unix Timestamp umwandeln:


PHP:
function parsedate ($datum) {
	return strtotime($datum, strftime('%d.%m.%Y'));
}


vorher musst du allerdings schon den Rest wegfiltern:


PHP:
//funktioniert:
echo parsedate "03.12.2007";

//funktioniert nicht:
echo parsedate "bla 01.11.1999 bla";
 
tewes schrieb:
Du musst ja auch die Buchstaben vor und nach den Datum "filtern".
PHP:
$regex = "/[A-Za-z]*([0-9]2\.[0-9]2\.[0-9]4)[A-Za-z]*/";
Das könnte eventuell klappen.
Ansonsten kannst du hier dein RegEx testen.

Grüße

tewes

Ich habe es getestet und es funktioniert nicht so wirklich. Ich habe den Ausdruck um [:space:] und Underscores ergänzt aber ohne Erfolg:
PHP:
$regex = "/[A-Za-z _]*([0-9]2\.[0-9]2\.[0-9]4)[A-Za-z _]*/";

Die Abfrage
PHP:
preg_match($regex, $str1);
bringt mir nur ein leeres Array zurück.
 
probiers so:


PHP:
$str1 = "bla 01.11.1999 bla";

preg_match('/(\d{2}\.\d{2}\.\d{4})/', $str1, $treffer);
echo "Datum: ".$treffer[0]." ergibt Timestamp: ".parsedate($treffer[0]);

function parsedate ($datum) {
	return strtotime($datum, strftime('%d.%m.%Y'));
}


edit: korrigiert, getestet und funktioniert!
edit2: ein bisschen Feedback wäre nicht schlecht...
 
Zuletzt bearbeitet: (fehler behoben!)
Zurück
Oben