[PHP] preg_match bei großen Inhalten

Wenn man einen preg_match Befehl auf einen langen String durchführen will, kann es passieren, dass man trotz korrektem regulärem Ausdruck kein Ergebnis oder nur eine Fehlermeldung zurück bekommt.

Falls dies der Fall sein sollte, kann man folgender Befehl evtl. Abhilfe schaffen:

ini_set('pcre.backtrack_limit', 1000000);

Falls eure PHP Version > 5.3.7 sein sollte, so ist euer PCRE Backtracking Limit ebenfalls auf 1000000 eingestellt. Bei älteren PHP Versionen kann dieses Codesnippet allerdings Wunder bewirken.

PHP – Datumsdifferenz sicher ermitteln

Um in PHP die Differenz zwischen zwei Datumsangaben zu ermitteln, gibt es folgende Möglichkeit:

$date1 = '2013-03-01'
$date2 = '2013-05-17'

$dateDiff = gregoriantojd(
                date('m', strtotime($date2)),
                date('d', strtotime($date2)),
                date('Y', strtotime($date2)))
            - gregoriantojd(
                date('m', strtotime($date1)),
                date('d', strtotime($date1)),
                date('Y', strtotime($date1)));

Es erfolgt erst die Umrechnung in das vom gregorianische ins julianische Datumsformat. Danach kann man durch eine einfache Rechenoperation die Differenz zwischen beiden Datumsangaben ermitteln und erhält den Abstand zwischen Datum 1 und Datum 2 in Tagen.

PHP – Datum berechnen

Mit PHP das Datum von gestern ermitteln:

$date = date('Y-m-d', time() - 86400);

Die aktuelle Zeit nehmen, davon 86400sec abziehen (entspricht 24h) und dann in das gewünschte Datumsformat casten.

Update: Besser geht das Ganze allerdings über folgendes Codesnippet:

$date = '2012-05-11';
date('Y-m-d', strtotime('-1 days', strtotime($date)));

Update 2:
Wenn ihr auf einen Wochentag bspw. 3 Werktage addieren wollt, funktioniert das analog zur oben beschriebenen Funktion:

$date = '2013-09-05';
date('Y-m-d', strtotime('+3 weekdays', strtotime($date)));

Weitere Funktionalitäten zu strtotime() findet ihr hier:
http://www.php.net/manual/de/datetime.formats.relative.php

PHP Datumsumwandlung von 05.04.12 in 2012-04-05

Beim Konvertieren von Datumsangaben in PHP kann es, vorrausgesetzt man macht es nicht wohlüberlegt, schon einmal zu der einen oder anderen Überraschung kommen.

Möchte man beispielsweise das Datum 05.04.12 einfach per

$date = date('Y-m-d', strtotime('05.04.12'));

konvertieren, dann bekommt man häufig das aktuelle Datum ausgegeben. Warum ist das so? Meiner Meinung nach, liegt das daran, dass PHP das Datum nicht korrekt in einen Timestamp auflösen kann. Es kann also nicht automatisch ermittelt werden, was hier Tag, Monat und Jahr sein soll. Bei einem Datum 05.04.2012 ist das allerdings kein Problem. Da kann strtotime() den korrekten Timestamp problemlos extrahieren.

Wie sieht ein möglicher Lösungsansatz aus?

$dateTemp = explode('.', '05.04.12');
$date = date('Y-m-d', mktime(0, 0, 0, $dateTemp[1], $dateTemp[0], $dateTemp[2]));

Somit erhält man das gewünschte Datum. Wichtig kann das werden wenn man nicht nur ein statisches Datum, wie in diesem Fall hat, sondern die Datumsangabe bspw. per Variable übergeben wird.