【发布时间】:2018-11-29 18:11:45
【问题描述】:
我正在尝试以下方法:
我有一个函数,只有当它们在当前时刻打开时才返回 pubs,
/**
* @param $pubs
* @return mixed
*/
public static function isPubCurrentlyOpen($pubs)
{
$pubs->whereHas('pubSchedules', function ($pubs) {
$pubs->where('week_day', Carbon::now()->dayOfWeek)
->whereRaw(
"'" . Carbon::now('Europe/Madrid')->format("H:i:s") . "' BETWEEN opening_time AND closing_time"
);
} );
return $pubs;
}
我遇到的问题是当一些酒吧在 00:00 之后有一个关闭时间(它会是“第二天”),所以如果我使用这个函数,即 18:00:00,它不会返回那些酒吧。
那么,有没有什么办法可以在我之前写的查询语句中做到这一点(将关闭时间再设置一天)?:
if($openingTime>$closingTime)
{
$closingTime = Carbon::now('Europe/Madrid')->setTimeFromTimeString($schedule->closing_time)->addDay(1);
}
非常感谢!!
【问题讨论】:
-
提供表结构,如果您的 opening_time 和 closing_time 不包含完整的日期/时间,那么您做错了
-
如果您的数据不是每天更新(这意味着您正在存储静态数据),那么它会很好......您只需使用两个时间之间的差异来弥补两个日期,例如:工作时间 -> 转换为日期 -> 比较
-
id| pub_id |工作日 |开放时间 |关闭时间,例如当 week_day = 3、opening_time = 09:00、closeing_time = 03:30 时遇到问题
-
是静态数据@ahmad...你能给我一个你所说的qhat的例子吗?谢谢兄弟!
标签: mysql laravel if-statement eloquent