获取未来3天内(包括今天)在Laravel的员工生日

axr492tv  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(159)

我试图获取在未来3天内过生日的雇员。我试图通过使用以下查询来实现这一点。

public function upcomingBirthdays()
{
    $from = now()->format('m-d');
    $to = now()->addDays(3)->format('m-d');

    $employees = Employees::whereRaw("DATE_FORMAT(dob, '%m-%d') BETWEEN '{$from}' AND '{$to}'")
                          ->where('team_id', 13)
                          ->where('status', 1)
                          ->orderBy('dob', 'DESC')
                          ->get();

    return view('frontend.employee.birthdays', compact('employees'));
}
// End Method

但这并没有返回预期的数据。
今天是2022-11-09
这是返回生日介于*2022年11月8日 * 和 *2022年11月10日 * 之间的员工。但不返回生日为11月11日和11月12日的员工。

vyswwuz2

vyswwuz21#

该问题可能与日期格式有关。使用DD而不是d,您将得到一个前导零表示一位数的月份日期。对于月份也是如此:使用MM代替m。
注意:对于1月1日、2日和3日的生日,此操作仍将失败。

gkl3eglg

gkl3eglg2#

你可能需要一个从nesbot到处理日期的Carbon包。我还没有测试过用内置PHP在日期内查询,但是我的代码可以用Carbon包。
所以,在你的情况下,试试这个:

$employees = Employee::whereBetween('dob', [Carbon::now(), Carbon::now()->addDay(3)])->get();
tpxzln5u

tpxzln5u3#

最终对我有效的解决方案是:

$employees = Employees::where('team_id', 13)
                        ->where('status', 1)
                        ->where(function($q){
                            $q->where('dob', 'like', '%' . Carbon::now()->format('m-d'))
                            ->orWhere('dob', 'like', '%' . Carbon::now()->addDays()->format('m-d'))
                            ->orWhere('dob', 'like', '%' . Carbon::now()->addDays(2)->format('m-d'))
                            ->orWhere('dob', 'like', '%' . Carbon::now()->addDays(3)->format('m-d'))
                            ->orderBy(DB::raw("DATE_FORMAT(dob,'%m-%d')"), 'ASC');
                        })
                        ->get();

相关问题