Letzten FR eines Monats

Tatsächlich, komischer Fehler. Rechne einfach noch 28 Tage drauf:
PHP:
$str = 'last Friday '.date('F Y').' +28 days';
 
Wenn die 28 Tage nachträglich draufgerechnet werden, funktioniert es:
PHP:
$str = 'last Friday '.date('F Y', strtotime('February 2003'));
var_dump(date('r', strtotime($str)+2419200));
 
Habe mir Gumbos Variante (wohl wesentlich schneller als meine) nochmal angeschaut und den "Fehler" entdeckt. Ohne Angabe eines Tages geht der Rechner vom ersten des Monats (sofern nicht festgelegt 1. Januar), ohne Angabe des Monats vom momentanen Jahr aus. Das kann man leicht ausnutzen oder umgehen, indem mal folgenden String interpretieren lässt:
PHP:
$str = 'last Friday 31 February 2003';
var_dump(date('r', strtotime($str)));
Also immer die 31 vor den Monatsnamen - Ansonsten wird der erste Februar als Bezugswert genutzt. Problematisch dürfte es theoretisch (habe es noch nicht geprüft) nur werden, wenn der gesuchte Tag eben der 31te des Monats ist. Hier könnte man dann den ersten des nächsten Monats als feste Referenz benutzen ("last Friday 1 March 2003").
Eh es jemand versucht: Die 32 ist ungültig und wird in einem return false resultieren - Den 30ten Februar kann man indes ohne Probleme benutzen ^^
 
Hallo,

hierfür könnte man dann den zweiten, optionalen Parameter von [phpf]strtotime[/phpf] verwenden:
PHP:
$timestamp = strtotime('last friday', mktime(12, 0, 0, date('n') + 1, 1));
echo date('r', $timestamp); # => Fri, 28 Sep 2007 00:00:00 +0200

Grüße,
Matthias
 
Der letzte Freitag im Februar 2003 ist nicht das Problem. Der letzte Freitag im Februar 2002 ist das Problem, da der 1. schon ein Freitag und vier Wochen später bereits März ist.
Dein Vorschlag löst das Problem leider nicht, maeTimmae.
 
Zurück