Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wiederkehrende Ereignisse am n-ten Wochentag jedes Monats

Hier ist eine mögliche Alternative für Sie. strtotime ist leistungsfähig und die Syntax enthält wirklich nützliche Bits wie umfassende relative Zeit- und Datumsangaben .

Sie können es verwenden, um den ersten bis N-ten bestimmten Wochentag eines bestimmten Monats zu generieren, indem Sie das Format " von " verwenden. Hier ist ein Beispiel mit date_create um eine DateTime aufzurufen Objekt, sondern normales altes strtotime funktioniert genauso:

php > $d = date_create('Last Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 25 2011 00:00:00
php > $d = date_create('First Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 04 2011 00:00:00
php > $d = date_create('First Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 06 2011 00:00:00
php > $d = date_create('Fourth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00
php > $d = date_create('Last Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00

Es wird auch den Monat überlaufen lassen, wenn Sie nach einem ungültigen fragen:

php > $d = date_create('Ninth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday May 01 2011 00:00:00

Beachten Sie, dass es nur mit der Ordnungszahl funktioniert Wortlaut. Du kannst "1st" oder "3rd" leider nicht bestehen.

Sobald Sie dies verwenden, um den richtigen N-ten Wochentag zu ermitteln, können Sie einfach die Anzahl der zu überspringenden Wochentage (7 für eine Woche, 14 für zwei, 21 für drei usw.) bis zum angegebenen Enddatum oder der angegebenen Anzahl von Wochen hinzufügen Wochen sind vergangen. Noch einmal, strtotime zur Rettung, indem Sie das zweite Argument verwenden, um die Relativität zu verketten:

php > echo date('l F d Y H:i:s', strtotime('+14 days', strtotime('First Thursday of March 2011')));
Thursday March 17 2011 00:00:00

(Meine lokale Kopie akzeptierte auch '+14 days First Thursday of March 2011' , aber das fühlte sich irgendwie komisch an.)