【问题标题】:How to get all fridays within date range by carbon如何通过碳获得日期范围内的所有星期五
【发布时间】:2017-01-30 14:13:25
【问题描述】:

我正在使用这个函数来获取两个日期之间的所有星期五:

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');

结果:

array:4 [▼
  0 => "2017-01-06"
  1 => "2017-01-13"
  2 => "2017-01-20"
  3 => "2017-01-27"
]

carbon里面有没有类似上面的功能?

【问题讨论】:

标签: php laravel laravel-5.2 laravel-5.3 php-carbon


【解决方案1】:

您可以像这样使用 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');
}

【讨论】:

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

对 Alexey Mezenin 的回答稍作修改,如果是星期五,则包括当前日期。

$fridays = [];
$startDate = Carbon::parse($fromDate)->modify('this friday'); // Get the first friday. If $fromDate is a friday, it will include $fromDate as a friday
$endDate = Carbon::parse($toDate);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2022-01-23
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多