

PHPで月末の金曜かどうか判定する方法を教えてください。

Carbonで曜日の判定はできるが、第◯週の◯曜日といった判定はできない？ぽい・・

[code]

    $date = "YYYY-MM-DD" 
    $test = strtotime("last fri of this month", strtotime($date));
    
[/code]

上記コードでYYYY-MM-DDの最終金曜は呼び出せます。  
これで`$test`と`$date`を  
`if($test === $date)`で比較すれば良いと思いますか？


CC BY-SA 4.0
2021-07-15T05:09:18.967
78194
2021-07-15T09:02:08.103
2021-07-15T06:03:24.527
9820
45215
question
php
PHPで月末の金曜日かどうか判定する方法


とても良いと思います。  
もしくは今日が金曜日かつ翌週が翌月を判定する方法もあります。

[code]

    <?php
    $date = strtotime("2021/06/25");
    
    // 月末の金曜と比較
    if($date == strtotime("last fri of this month", $date)) {
        echo "最終金曜日です。\n";
    }
    
    // 曜日比較 && 現在の月と翌週の月を比較
    if(date('w', $date) == 5
       && date('m', $date) != date('m', strtotime("+1 week", $date))) {
        echo "最終金曜日ですってば。\n";
    }
    ?>
    
[/code]


CC BY-SA 4.0
2021-07-15T06:02:42.243
78195
2021-07-15T06:02:42.243
9820
78194
answer


> Carbonで曜日の判定はできるが、第◯週の◯曜日といった判定はできない？ぽい・・

`Carbon` を使う場合です。

[code]

    <?php
    
    require 'Carbon/autoload.php';
    
    use Carbon\Carbon;
    use Carbon\CarbonPeriod;
    
    $day = '2021-07-15';
    // $day = Carbon::now();
    $period = CarbonPeriod::between(
        Carbon::parse("first fri of {$day}"),
        Carbon::parse("last fri of {$day}"),
      )->weeks();
    
    foreach ($period as $date) {
      $fridays[] = $date->format('Y-m-d');
    }
    
    echo implode(PHP_EOL, $fridays) . PHP_EOL;
    echo PHP_EOL;
    
    $last = Carbon::parse("last day of {$day}")->subDays(3);
    $month = $last->format('Y/n');
    foreach (range(0, 2) as $offset) {
      $date = $last->addDays(1)->format('Y-m-d');
      echo "{$date} is " .
        ($date == end($fridays) ? '' : 'not ') .
        "last friday of {$month}" . PHP_EOL;
    }
    
    # 実行結果
    2021-07-02
    2021-07-09
    2021-07-16
    2021-07-23
    2021-07-30
    
    2021-07-29 is not last friday of 2021/7
    2021-07-30 is last friday of 2021/7
    2021-07-31 is not last friday of 2021/7
    
[/code]


CC BY-SA 4.0
2021-07-15T07:23:54.240
78196
2021-07-15T09:02:08.103
2021-07-15T09:02:08.103
47127
47127
78194
answer