Carbon return 两个日期之间的生日

Carbon return birthday between two dates

我有这个方法 return 所有生日在两个日期之间的用户,我正在做以下查询(使用 laravel):

public function birthdays()
{
    return Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
        $this->startDate->format('m-d'),
        $this->endDate->format('m-d')))
        ->get();
}

它运行完美。但是,当我在比方说 12 月和 1 月之间进行搜索时,它不起作用,因为查询 returns 显然是空的,因为它在没有年份的情况下进行搜索。在我的数据库中,我只将生日存储为他们的完整生日,例如:1985-01-10。

我怎样才能使其在 12 月->1 月或 11 月->5 月期间也能进行搜索?

编辑:我无法在查询中添加年份,因为它不会 return 所有生日。还是我遗漏了什么?

public function upcomingMonths($months = '2')
{
    $this->startDate = Carbon::now();
    $this->endDate = Carbon::now()->addMonth(''.$months.'');

    return $this;
}

我使用 class 不仅仅是 return 生日,例如,还有约会和其他东西,因为我链接了这些方法:

$calendar = new App\Calendar;

$appointments = $calendar->upcomingMonths()->appointments();
$birthdays = $calendar->upcomingMonths()->birthdays();

编辑:让它像这样工作:

        if($this->month($this->endDate) < $this->month($this->startDate))
        {
            $a = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
                $this->startDate->format('m-d'),
                '12-31'))
                ->get();

            $b = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
                '01-01',
                $this->endDate->format('m-d')))
                ->get();

            $result = $a->merge($b);

            dd($result);
        }

如果您无法添加年份并且问题出在年底,您可以检测结束日期是否更改为年份(结束日期月份 < 开始日期月份),然后将查询拆分为2:一个从开始日期到年底,另一个从年初到结束日期。然后你必须合并两个集合和 return 它。