Laravel - 获取今天在开始和结束之间的行
Posted
技术标签:
【中文标题】Laravel - 获取今天在开始和结束之间的行【英文标题】:Laravel - Get row that has today between begin and end 【发布时间】:2017-07-15 03:04:56 【问题描述】:我有一个包含两个日期字段的表格,begin
和 end
。
我正在尝试获取所有已开始但尚未结束的行。如果今天小于begin
,则不应包含它们。如果今天比end
大,则不应包括在内。
我正在使用 laravel 雄辩。这是我尝试过的
$now = \Carbon\Carbon::now();
$promos = \App\Models\LivePromo::
where("begin", "<=", $now)
->where("end", ">=", $now)
//Other conditions
->get();
这看似有效,但它也选择了已经结束的更大的行。 我怎样才能使这项工作如我所愿?
编辑
begin
列是一个日期时间列,表示“促销”应该何时开始,end
列是一个日期时间列,表示“促销”应该何时结束。我只是想获取当前日期和时间的所有有效促销
编辑
样本数据
$now = '2017-02-24 10:29:10' // \Carbon\Carbon::now();
【问题讨论】:
>=
应该是你最后一行的<=
@Farkie 不起作用。我添加了一个编辑来更好地解释我想要实现的目标
您能否向我们展示Carbon::now()
返回的内容以及不应该返回的行的示例?
@RaymondAtivie 您发布的这两条记录都有效吗?他们都有过去的begin
日期和未来的end
日期?
@james 我刚刚意识到我的服务器时间比我的客户端时间晚了一小时。这引起了一些误解。上面的代码是有效的。麻烦各位大佬抱歉。我会尽快删除帖子
【参考方案1】:
另外,它可能取决于您的数据库引擎。
某些引擎要求您使用whereDate
() 方法而不是普通的旧where()
$promos = LivePromo::whereDate("begin", "<=", $now)
->whereDate("end", ">", $now)
->get();
【讨论】:
【参考方案2】:从结束日期条件中删除=
:
$now = \Carbon\Carbon::now();
$promos = \App\Models\LivePromo::
where("begin", "<=", $now)
->where("end", ">", $now)
->get();
【讨论】:
以上是关于Laravel - 获取今天在开始和结束之间的行的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 使用 eloquent 在开始日期和结束日期之间选择行
如何使用Scala计算Spark中数据框中列的开始索引和结束索引之间的行的平均值?