Carbon PHP previousWeekday返回周末

kninwzqo  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(148)

我正在使用Carbon PHP为我的项目构建一个小的API。我需要得到一个月的最后一个工作日,在我的上下文中,这应该是每个月的最后一个工作日。
这是我目前的做法:

$lastWorkingDay = Carbon::parse('2022-04-27')->lastOfMonth();

if ($lastWorkingDay->isWeekend()) {
    $lastWorkingDay = Carbon::parse('2022-04-27')->lastOfMonth()->previousWeekday();
}

我在这里遇到的问题是,在四月份,这个月的最后一天是周末,那么我的previousWeekday方法似乎得到的是星期六而不是星期五?

xytpbqjk

xytpbqjk1#

这会容易得多如果

$lastWorkingDayOfMonth = Carbon::parse('2022-04-27')
  ->modify('first Day of next Month')
  ->modify('last weekday');

modify是Carbon从DateTime继承的方法。
这也可以不使用Carbon而只使用DateTime。这是little test
如果在应用程序中更频繁地需要该代码,则可以在Carbon中为其定义宏。

Carbon::macro('lastWorkingDayOfMonth', function() {
    return $this->modify('first Day of next Month')->modify('last weekday');
});

lastWorkingDayOfMonth()现在可以像任何其他方法一样在Carbon中的任何地方使用。

echo Carbon::parse('2022-04-27')->lastWorkingDayOfMonth()->format('l, d F Y');
//Friday, 29 April 2022

相关问题