sql >> Databasteknik >  >> RDS >> Mysql

Återkommande händelser den n:e veckodagen i varje månad

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.)



  1. Skriv in dessa tabellvärdade parametrar

  2. Hur kontrollerar jag om MySQL returnerar null/tom?

  3. MySQL Entity Framework Error - Den angivna butiksleverantören kan inte hittas i konfigurationen eller är ogiltig

  4. Konstigt beteende i Postgresql