簡體   English   中英

兩個日期之間的碳返還生日

[英]Carbon return birthday between two dates

我有此方法返回兩個日期之間有生日的所有用戶,我正在執行以下查詢(使用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();
}

它工作正常。 但是,當我在十二月和一月之間搜索時,它不起作用,因為查詢顯然返回空值,因為它搜索的是沒有年份的年份。 在我的數據庫中,我只是將生日存儲為他們的完整生日,例如: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);
        }

如果您無法添加年份並且問題出在年底,則可以檢測結束日期是否已更改年份(結束日期月份<開始日期月份),然后將查詢分為2:開始日期,直到年末,另一個開始日期,直到年末。 然后,您必須合並兩個集合並返回它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM