Php碳:每周一和周二,每两周

Php碳:每周一和周二,每两周,php,php-carbon,Php,Php Carbon,我可以每周一和周二都去,但每周都去 我怎样才能每两周去一次 $days = [1,2]; $filterDayOfWeek = function ($date) use ($days) { return in_array($date->dayOfWeekIso, $days, true); }; $period = Carbon::parse($this->entry_start->toDateString())->daysUntil(

我可以每周一和周二都去,但每周都去

我怎样才能每两周去一次

$days = [1,2];
$filterDayOfWeek = function ($date) use ($days) {
        return in_array($date->dayOfWeekIso, $days, true);
};

$period = Carbon::parse($this->entry_start->toDateString())->daysUntil(
        $this->periodicity_end->toDateString()
    );
$period->addFilter($filterDayOfWeek);
我在文件中看到:

 $interval = \Carbon\CarbonInterval::weeks(2);
但我不知道如何申请我的护照


谢谢你

每两周,你首先要确定如何过滤奇数/偶数或从一开始

CarbonInterval::weeks2只能在嵌套迭代时使用:1循环2周,然后循环几天:

$days = ['Monday', 'Tuesday'];
foreach (CarbonPeriod::create($start, CarbonInterval::weeks(2), $end, CarbonPeriod::IMMUTABLE) as $baseDate) {
  foreach ($days as $dayName) {
    $date = $baseDate->is($dayName) ? $baseDate : $baseDate->next($dayName);
    echo $date;
  }
}
请看我的评论,如果你能给出更精确的答案。我可以在回答中考虑到这一点。

这是我的解决方案

function forEveryWeek(Periodicity $periodicity): CarbonPeriod
{
    /**
     * monday, tuesday, wednesday
     * @example : [1,2,3]
     */
    $days = $periodicity->getDays();
    /**
     * @example 1 for every weeks, 2 every 2 weeks, 3,4...
     */
    $repeat_week = $periodicity->getRepeatWeek();

    /**
     * filter days of the week
     * @param $date
     * @return bool
     */
    $filterDayOfWeek = function ($date) use ($days) {
        return in_array($date->dayOfWeekIso, $days, true);
    };

    /**
     * Carbon::class
     * $this->entry_start
     * $this->periodicity_end
     */
    $period = Carbon::parse($this->entry_start->toDateString())->daysUntil(
        $this->periodicity_end->toDateString()
    );

    /**
     * filter every x weeks
     * @param $date
     * @return bool
     */
    $filterWeek = function ($date) use($repeat_week) {
        return $date->weekOfYear % $repeat_week === 0;
    };

    $period->excludeStartDate();
    $period->addFilter($filterDayOfWeek);

    if ($repeat_week > 1) {
        $period->addFilter($filterWeek);
    }

    return $period;
}

我认为休息一下对这里没有帮助。相反,看看一年中的周数是否可以被2整除。是的,我考虑过,但在我的应用程序中,它可以是每3、4、5周一次……你可以使用相同的逻辑,只需更改模数$date->weekOfYear%4==0我们需要精确性:例如,如果条目开始时间是星期二,则跳过的周是在星期一和星期二之间,还是在一起。什么可以包含开始日期以及如何确定第一个日期?什么可以包含$days?请给出一些例子,这样我们就可以为您提供适合您的用例的解决方案。问题:既然$this->entry\u start->toDateString已经是一个Carbon实例,为什么要解析$this->entry\u start->toDateString?这很出色,正是我所需要的。非常感谢。我确实将句点从解析改为循环,但两者都可以正常工作。