sql >> Databáze >  >> RDS >> Mysql

Opakující se akce v n-tý pracovní den každého měsíce

Zde je pro vás možná alternativa. strtotime je výkonný a syntaxe obsahuje opravdu užitečné kousky jako úplné znění relativního času a data .

Můžete jej použít ke generování prvního až N-tého konkrétního dne v týdnu konkrétního měsíce pomocí formátu „ z “. Zde je příklad použití date_create k vyvolání DateTime objekt, ale obyčejný starý strtotime funguje stejným způsobem:

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

Také přeteče měsíc, pokud požádáte o neplatný:

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

Upozorňujeme, že funguje pouze s řadovým číslem formulace. Bohužel nemůžete projít "1st" nebo "3rd".

Jakmile toto použijete k získání správného N-tého dne v týdnu, můžete jednoduše přidat počet potřebných dnů v týdnu, které chcete přeskočit (7 pro jeden týden, 14 pro dva, 21 pro tři atd.) podle potřeby až do určeného koncového data nebo určeného počtu uplynulo několik týdnů. Ještě jednou strtotime k záchraně pomocí druhého argumentu k řetězení relativních vztahů:

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

(Moje místní kopie také akceptovala '+14 days First Thursday of March 2011' , ale bylo to trochu divné.)



  1. Proč nemohu provést agregační funkci na výrazu obsahujícím agregaci, ale mohu tak učinit vytvořením nového příkazu select kolem něj?

  2. Řešení problémů generátoru číselných řad – 1. část

  3. Jak CURDATE() funguje v MariaDB

  4. MYSQL deklarující proměnné