两个日期之间的碳返回生日

时间:2016-08-01 20:32:17

标签: php laravel date between php-carbon

我有这个方法返回两个日期之间生日的所有用户,我正在进行以下查询(使用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月之间进行搜索时,它不起作用,因为查询返回null,显然,因为它在没有年份的情况下进行搜索。在我的数据库中,我只将生日存储为他们的完整生日,例如:1985-01-10。

我怎样才能让它能够在12月 - > 1月或11月 - >之间进行搜索?

编辑:我无法在查询中添加年份,因为它不会返回所有生日。或者我错过了什么?

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

    return $this;
}

我使用的课程不仅仅是返回生日,例如,约会和其他东西,因为我链接方法:

$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);
        }

1 个答案:

答案 0 :(得分:1)

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