Ето една възможна алтернатива за вас. strtotime
е мощен и синтаксисът включва наистина полезни битове
като изчерпателна формулировка за относително време и дата
.
Можете да го използвате, за да генерирате от първия до N-ти конкретни делнични дни на конкретен месец, като използвате формата "от". Ето пример за използване на date_create
за да извикате DateTime
обект, но обикновен стар strtotime
работи по същия начин:
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
Той също така ще препълни месеца, ако поискате невалиден:
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
Имайте предвид, че работи само с редовния номер формулировка. Не можете да преминете "1-во" или "3-то", за съжаление.
След като използвате това, за да вземете правилния N-ти делничен ден, можете просто да добавите броя на нужните дни от седмицата, които да пропуснете (7 за една седмица, 14 за две, 21 за три и т.н.), както е необходимо до определената крайна дата или определен брой изминаха седмици. Още веднъж, strtotime
за помощ, използвайки втория аргумент за свързване на относителност:
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
(Моето локално копие също прие '+14 days First Thursday of March 2011'
, но това се чувстваше някак странно.)