如何通过碳获取日期范围内的所有星期五

S.M*_*ian 4 php laravel php-carbon laravel-5.2 laravel-5.3

我正在使用此功能来获取两个日期之间的所有星期五:

public function getFridaysInRange($dateFromString, $dateToString)
{
    $dateFrom = new \DateTime($dateFromString);
    $dateTo = new \DateTime($dateToString);
    $dates = [];

    if ($dateFrom > $dateTo) {
        return $dates;
    }

    if (1 != $dateFrom->format('N')) {
        $dateFrom->modify('next friday');
    }

    while ($dateFrom <= $dateTo) {
        $dates[] = $dateFrom->format('Y-m-d');
        $dateFrom->modify('+1 week');
    }

    return $dates;
}

$this->getFridaysInRange('2017-01-01','2017-01-30');
Run Code Online (Sandbox Code Playgroud)

结果:

array:4 [?
  0 => "2017-01-06"
  1 => "2017-01-13"
  2 => "2017-01-20"
  3 => "2017-01-27"
]
Run Code Online (Sandbox Code Playgroud)

carbon上面有什么功能吗?

Ale*_*nin 7

您可以像这样使用Carbon的所有功能:

$fridays = [];
$startDate = Carbon::parse($fromDate)->next(Carbon::FRIDAY); // Get the first friday.
$endDate = Carbon::parse($toDate);

for ($date = $startDate; $date->lte($endDate); $date->addWeek()) {
    $fridays[] = $date->format('Y-m-d');
}
Run Code Online (Sandbox Code Playgroud)

  • 以防万一有人决定使用此代码。如果开始日期是星期五,-&gt;next(Carbon::FRIDAY) 将不会获得“第一个”星期五。next() 将忽略第一天并转到“下一天”。我不确定获得“第一个”星期五的最佳方法是什么,但我使用了类似的方法: -&gt;sub("1 Day")-&gt;next("Friday") (2认同)