Laravel - 获取今天在开始和结束之间的行

Posted

技术标签:

【中文标题】Laravel - 获取今天在开始和结束之间的行【英文标题】:Laravel - Get row that has today between begin and end 【发布时间】:2017-07-15 03:04:56 【问题描述】:

我有一个包含两个日期字段的表格,beginend

我正在尝试获取所有已开始但尚未结束的行。如果今天小于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();

【问题讨论】:

&gt;= 应该是你最后一行的&lt;= @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中数据框中列的开始索引和结束索引之间的行的平均值?

如何在ios中获取今天日期的开始和结束时间? [复制]

SQL 'overlaps' 仅获取开始和结束之间的日期(不包括开始和结束日期)

如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel