当前位置: 首页 > 面试题库 >

Laravel雄辩的日期时间字段中的比较日期

彭衡
2023-03-14
问题内容

我想通过表达式从表中获取所有行:

table.date <= 2014-07-10

但是,如果该列包含日期时间,可以这样说:

2014-07-10 12:00:00

但是如果我这样做:

where('date', '<=', $date)

它不会排。

我猜这是因为$ date = 2014-07-10,这使MySQL假设它是2014-07-10 00:00:00。

在普通的MySQL中,我会做

where DATE(date) <= $date

使用Laravel的口才相当于什么?


问题答案:

Laravel
4+为您提供这些方法:whereDay()whereMonth()whereYear()(#3946)和whereDate()(#6879)。

他们DATE()为您完成SQL 工作,并管理SQLite的差异。

您的结果可以这样实现:

->whereDate('date', '<=', '2014-07-10')

有关更多示例,请参见#3946的第一条消息以及此Laravel
Daily文章

更新:
尽管上述方法很方便,但正如Arth所指出的那样,它在大型数据集上效率不高,因为DATE()必须在每个记录上应用SQL函数,从而丢弃了可能的索引

以下是进行比较的一些方法(但请阅读以下说明):

->where('date', '<=', '2014-07-10 23:59:59')

->where('date', '<', '2014-07-11')

// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');

->where('date', '<', $dayAfter)

笔记:

  • 23:59:59可以(暂时),因为精确到1秒,但是请看一下这篇文章:23: 59 : 59还不是一天结束。不完全是!
  • 请记住“零日期”的情况(“ 0000-00-00 00:00:00”)。尽管应该避免这些“零日期”,但它们是许多问题的根源。如果需要,最好使该字段为空。


 类似资料:
  • 问题内容: 我想比较两个日期和时间,我想要所有结果 但这只是比较日期而不是时间。它给了我今天日期的所有结果集 提前致谢! 问题答案: 您要显示的查询示例: 04:00:00是4AM,所以您显示的所有结果都 在 那 之后 ,这是正确的。 如果要在下午4点之后显示所有内容,则需要在查询中使用正确的(24hr)表示法。 为了使事情更清晰,请尝试以下操作: 这将向您显示日期及其12小时时间。

  • 问题内容: 在我的收藏夹中,每个文档都有2个修改和同步的日期。我想查找已修改>同步,或不存在同步的内容。 我试过了 但没有显示我的期望。有任何想法吗? 谢谢 问题答案: 您不能将一个字段与具有正常查询匹配的另一个字段的值进行比较。但是,您可以使用聚合框架执行此操作: 我在其中输入“您的其他常规查询”,因为您可以使该位使用索引。因此,如果您只想对该字段所在的文档执行此操作,则可以执行以下操作: 用输

  • 我需要比较MySQL中的日期,忽略列中的时间部分。我尝试了以下SQL。 即使MySQL表中有日期,它也不会检索任何行。在MySQL中比较日期时,如何忽略字段中的时间部分?

  • 问题内容: 我正在使用moment.js格式化我的日期时间,这里有两个日期值,当一个日期大于另一个日期时,我想实现一种特定的功能。我阅读了他们的大多数文档,但没有找到实现此目的的功能。我知道会在那里。 这是我的代码: 编辑 在这里,我正在比较两个日期,即,期望第一个日期大于第二个日期,但是它总是转到else条件。不知道为什么 问题答案: 我相信你正在寻找的查询功能,,,和。 但是要确切地说出您要尝

  • 我正在使用moment.js格式化我的日期时间,这里我有两个日期值,当一个日期大于另一个时,我想实现一个特定的函数。我读了他们的大部分文档,但没有找到实现这一点的函数。我知道它会在那里。 这是我的代码: 编辑 在这里,我比较了两个日期,即,希望第一个日期大于第二个日期,但它总是转到else条件。我不知道为什么?

  • 我有一个java实体类TimeEntry.java它的属性之一是Date,它看起来像这样。 对于该字段,在swagger UI模型模式上,字段日期显示为“日期”:“2016-01-08T22:34:22.337Z”,但我需要该字段作为“日期”:“2016-01-08”。 我尝试了以下方法: 请帮帮忙。