php более чистый метод для определения первого, второго, третьего или четвертого дня месяца данной даты - PullRequest
0 голосов
/ 01 февраля 2020

Есть множество тем, связанных с этим ... но большинство о том, чтобы получить будущий первый, второй, третий или четвертый понедельник (или вторник или пятницу ... или ...) определенного месяца. Не так много о том, как определить, является ли прошедшая дата первым или третьим днем ​​этого месяца. Независимо от того, является ли этот день понедельником, четвергом или любым другим днем, мне необходимо определить, является ли данная дата первой / второй / третьей / четвертой этого конкретного месяца. Затем используйте эту информацию, чтобы предсказать первый / второй / третий / четвертый день будущего месяца:

Я пришел к следующему, кажется, он работает просто отлично, но мне любопытно узнать, есть ли лучше, короче или чище метод.

// given a past date, 
$day = ("2019-10-13") ;  // happens to be the 2nd Sunday of October ...but how to determine this?

$dow = date('l',strtotime($day)) ;  // returns "Sunday" 
$dom = date('j',strtotime($day)) ;  // returns "13"
$xom = ceil($dom / 7) ;   // returns "2"
$xth = array("","first","second","third","fourth","fifth") ; 
echo $xth[$xom] ;  // echos "second"

// continuing the "sunday" example, get the 2nd Sunday of the current or future month:
$tempDate = date('Y-m-d',strtotime($xth[$xom]. ' ' .$dow. ' of this month')) ;  // 2020-02-09
$tempDate = date('Y-m-d',strtotime($xth[$xom]. ' ' .$dow. ' of next month')) ;  // 2020-03-08
$tempDate = date('Y-m-d',strtotime($xth[$xom]. ' ' .$dow. ' of 2021-08')) ;  // 2021-08-08

Есть ли чище, короче метод для достижения sh такой же? Я надеялся на простое date('c, strtotime ($ day)) - I know the switchcdoesn't exist, but if it did maybe return второе воскресенье` или что-то в этом роде.

...