【问题标题】:Laravel 5.2 compare dates that are strings?Laravel 5.2 比较字符串的日期?
【发布时间】:2017-08-20 16:04:26
【问题描述】:

我有一个包含两个日期的表:start_date 和 end_date。这两列都是字符串。当我尝试查询以比较这些日期的记录时,Laravel 将它们视为字符串,而不是日期。

例如,对于这个查询:

Schedule::whereDate('start_date','<=',date('m/d/Y'))->whereDate('end_date','>=',date('m/d/Y'))->get();

没有返回结果,这是不正确的。

有什么想法吗?或者任何其他比较字符串日期的方法?

谢谢。

【问题讨论】:

  • 为什么列是字符串?您必须进行字符串比较,这可能不会有用。你将不得不在 mysql 或 laravel 中做一些令人讨厌的诡计来完成这项工作。我会看看我是否能找出一个例子,但真正的解决方案是将字符串转换为日期。
  • 不确定为什么它们没有被创建为日期时间,但这就是我目前所拥有的。我希望可以选择将字符串查询为日期。

标签: php mysql laravel date laravel-5.2


【解决方案1】:

您需要将这些列设为datetime 而不是字符串:

$table->dateTime('start_date');
$table->dateTime('end_date');

另外,最好将这些列添加到 $dates 数组中:

protected $dates = ['created_at', 'updated_at', 'start_date', 'end_date'];

【讨论】:

  • 谢谢。我将尝试了解将这些字段更改为 dateTime 的影响,因为已经构建了一些逻辑来比较现有字符串(这很可能是错误的)
  • 将列更改为日期时间就可以了,只需要在这里和那里更改一些查询。谢谢!
【解决方案2】:

看看碳。非常适合时间的东西

http://carbon.nesbot.com/docs/

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多