Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩地比较datetime字段中的日期_Php_Mysql_Datetime_Laravel 4 - Fatal编程技术网

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()
()

他们为您执行SQL
DATE()
工作,并管理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
确实是关于MySQL
INTERVAL
。不过,如果可能的话,我更喜欢在PHP端处理,而不是MySQL甚至Apache。我厌倦了它们所有需要管理的微妙之处。这似乎不能回答问题uestion所有。@SteveFromAccounting在这种情况下,代码不适用于Laravel?您可以发送代码片段吗?这是唯一适用于我的代码片段,因为我在$dates中定义了:)谢谢
 whereDate('date','=','2016-07-14')
whereDate('date',$date)
whereDate('date', '=', $date)