我需要选择一个特定的用户每周的最高分。我使用Carbon,并将Carbon startofWeek设置为周日,将endOfWeek设置为周六。
这是我的数据库数据
id user_id score created_at updated_at
43 33 88 2020-02-23 00:00:00 NULL
44 33 15 2020-02-24 00:00:00 NULL
45 33 42 2020-02-24 00:00:00 NULL
46 33 86 2020-02-25 00:00:00 NULL
47 33 100 2020-02-04 00:00:00 NULL 以下是我的代码
$week = GameScore::select(max('score')
->where('created_at', '>=', Carbon::now()->startOfWeek(Carbon::SUNDAY))
->where('created_at', '<=', Carbon::now()->endOfWeek(Carbon::SATURDAY))
->where('user_id', $user->id)
->get();根据我的数据,我需要得到88分作为结果,因为这个分数是在2月23日星期天获得的,这是从本周开始的一周,到今天为止所有其他分数都不会大于这个分数。
发布于 2020-02-25 21:27:50
在代码中,您需要在比较时指定日期格式,
Carbon::now()->endOfWeek(Carbon::SATURDAY)->format('Y-m-d H:i:s');发布于 2020-02-25 21:27:26
$en = CarbonImmutable::now()->locale('en_US');
$ar = CarbonImmutable::now()->locale('ar');
// We still can force to use an other day as start/end of week
$start = $en->startOfWeek(Carbon::TUESDAY);
$end = $en->endOfWeek(Carbon::SATURDAY);var_dump($ar->endOfWeek()->format('Y-m-d H:i'));
是为我工作的
发布于 2021-10-07 07:48:32
您可以使用碳静态函数setWeekStartsAt设置一周的开始日期,也可以使用该函数计算出一周的结束日期。
public static function getWeekStartAndEndDates($date, $startDayIndex = Carbon::SATURDAY)
{
$date = Carbon::parse($date);
$date::setWeekStartsAt($startDayIndex);
$from = $date->startOfWeek();
$date::setWeekEndsAt($from->copy()->addDays(6)->dayOfWeek);
$to = $date->copy()->endOfWeek();
return ['from' => $from, 'to' => $to];
}https://stackoverflow.com/questions/60395554
复制相似问题