【问题标题】:How to get customer between two dates in laravel? [duplicate]如何在 laravel 的两个日期之间获取客户? [复制]
【发布时间】:2020-07-14 15:13:18
【问题描述】:

我的日期格式是 2020 年 6 月 26 日,我运行 sql 查询

SELECT * FROM `customers` WHERE date BETWEEN '26-June-2020' AND '30-June-2020'

但它在 2020 年 6 月 26 日至 2020 年 7 月 3 日的记录中表现不佳

我的 laravel 代码是这样的:

$customers = Customer::whereBetween('date', array($datefrom, $dateto))->get();

【问题讨论】:

  • 它应该是 '26-06-2020' AND '30-06-2020',而不是 '26-June-2020' AND '30-June-2020'
  • 2020 年 6 月 26 日,我的表格中有太多数据,采用这种格式。有什么办法可以解决这个问题吗?

标签: php laravel date


【解决方案1】:

您首先需要将日期转换为Carbon 对象

$from = Carbon::parse($dateFrom)
    ->startOfDay()
    ->toDateTimeString();

$to = Carbon::parse($dateTo)
    ->endOfDay()
    ->toDateTimeString();

$customers = Customer::whereBetween('date', [$from, $to])->get();

【讨论】:

    【解决方案2】:

    我认为问题是 $datefrom $dateto 的日期格式,我发现了一个类似你的问题的问题 How to query between two dates using Laravel and Eloquent?。 希望对你有帮助。

    【讨论】:

    • 欢迎来到 Stack Overflow!这应该是评论,而不是答案。如果这是一个重复的问题,请vote to close 和/或在您earn 足够reputation 后发表评论。如果没有,为这个特定问题量身定制答案
    【解决方案3】:

    如果您的数据采用格式(例如)01-June-2020,这意味着您的数据未正确格式化为日期。这意味着您需要将它们转换为日期,然后才能获得正确的 BETWEEN 结果。不这样做会产生一个BETWEEN 比较日期为字符串的结果,这意味着01-June-2020 将出现在02-January-2020 之前。

    $customers = Customer::whereBetween(
        DB::raw("STR_TO_DATE(date, '%d-%M-%Y')"), 
        array($datefrom, $dateto) // These should also be correctly formatted as YYYY-MM-DD or as carbon objects
    )->get();
    

    但是,这种方法的主要缺点是,如果您将给定列永久转换为日期对象并添加索引,则无法使用任何索引来使任何查询慢得多。

    此解决方案使用STR_TO_DATE

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多