Här är ett möjligt alternativ för dig. strtotime
är kraftfull och syntaxen innehåller riktigt användbara bitar
som omfattande relativ tid- och datumformulering
.
Du kan använda den för att generera de första till N:te specifika veckodagarna i en specifik månad genom att använda formatet " av ". Här är ett exempel med date_create
för att anropa en DateTime
objekt, men vanlig gammal strtotime
fungerar på samma sätt:
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
Det kommer också att svämma över månaden om du ber om en ogiltig:
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
Observera att det bara fungerar med ordningsnumret lydelse. Du kan tyvärr inte passera "1:a" eller "3:a".
När du väl har använt detta för att ta rätt N:te veckodag kan du sedan helt enkelt lägga till antalet nödvändiga veckodagar att hoppa över (7 för en vecka, 14 för två, 21 för tre, etc) efter behov till det angivna slutdatumet eller det angivna antalet veckor har gått. Återigen, strtotime
till undsättning genom att använda det andra argumentet för att kedja samman relativitet:
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
(Min lokala kopia accepterade också '+14 days First Thursday of March 2011'
, men det kändes lite konstigt.)