Php Laravel雄辩地比较datetime字段中的日期
我想通过表达式从表中获取所有行:Php Laravel雄辩地比较datetime字段中的日期,php,mysql,datetime,laravel-4,Php,Mysql,Datetime,Laravel 4,我想通过表达式从表中获取所有行: table.date <= 2014-07-10 但如果我这样做: where('date', '<=', $date) where('date',”您是否考虑过使用: where('date', '<', '2014-08-11') where('date',”Laravel 4+为您提供以下方法:whereDay(),whereMonth(),whereYear()()和whereDate()() 他们为您执行SQLDATE()工作,
table.date <= 2014-07-10
但如果我这样做:
where('date', '<=', $date)
where('date',”您是否考虑过使用:
where('date', '<', '2014-08-11')
where('date',”Laravel 4+为您提供以下方法:whereDay()
,whereMonth()
,whereYear()
()和whereDate()
()
他们为您执行SQLDATE()
工作,并管理SQLite的差异
您的结果可以通过以下方式实现:
->whereDate('date', '<=', '2014-07-10')
注:
- 23:59:59(目前)还可以,因为精度为1秒,但看看这篇文章:
- 请记住“零日期”的情况(“0000-00-00 00:00:00”)。虽然应该避免这些“零日期”,但它们是许多问题的根源。如果需要,最好使字段为空
您可以使用它获取“2016-07-14”日期的所有记录
whereDate('date','=','2016-07-14')
或将另一个代码用于动态日期
whereDate('date',$date)
你可以用这个
whereDate('date', '=', $date)
如果您给出whereDate,那么只比较datetime字段中的date。如果您仍然想知道如何解决它
我用
$protected$dates=['created\u at'、'updated\u at'、'aired'];
在我的模型中,在我做的地方
where('aired','>=',time())
因此,只需使用unix在何处进行比较
另一方面,在视图中,必须使用日期对象
希望它能帮助别人!以下是我的逻辑:
如果比较日期,则方法应为whereDate,如果比较完整日期时间,则方法仅适用于以下情况:
$calendar\u-alert=DB::table('calendar\u-alert')->whereDate('when','=',now()->format('Y-m-d'))->where('when','>',now()->format('H:i:s')->get();为什么他应该避免使用DATE()
在索引列上?这可能是一个解决方案,但似乎更像是一个黑客而不是最佳做法。如果一个字段realy包含00:00:00作为时间,该怎么办。@almo,一旦你习惯了MySQL比较日期的方式,它就不算太糟糕了。它就像字符串比较;'2014-08-10 00:00:00'比'2014-08-10'大。@almo你应该避免使用DATE()在索引列上,因为它阻止MySQL使用此索引。如果可能,请在比较运算符的右侧使用表达式。不,这是最佳做法,不是黑客行为!::whereRaw(“DATE(DATE))再次,我建议不要使用此方法,它将列包装在DATE()中
函数,引擎无法在列上使用索引。没问题!我错误地认为日期像字符串一样进行比较,它们只是被转换然后比较。2014-07-11
将在比较之前隐式转换为2014-07-11 00:00:00
,幸运的是,这与您的其他解释相符。还有请注意,与在PHP中处理日期不同,您可以愉快地使用WHERE date<:date+INTERVAL 1 DAY
确实是关于MySQLINTERVAL
。不过,如果可能的话,我更喜欢在PHP端处理,而不是MySQL甚至Apache。我厌倦了它们所有需要管理的微妙之处。这似乎不能回答问题uestion所有。@SteveFromAccounting在这种情况下,代码不适用于Laravel?您可以发送代码片段吗?这是唯一适用于我的代码片段,因为我在$dates中定义了:)谢谢
whereDate('date','=','2016-07-14')
whereDate('date',$date)
whereDate('date', '=', $date)