You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何只获取日期不显示时间?

解决方法

要只保留日期部分,你需要修改查询里提取日期和分组依据两个地方——原来的calldate是带时间的datetime类型,直接分组会把同一天不同时间的记录分开,同时返回结果也会带时间。

具体修改步骤(以MySQL为例)

把每个查询中的'calldate as ibdate'替换成DB::raw('DATE(calldate) as ibdate'),同时把groupBy('calldate')替换成groupBy(DB::raw('DATE(calldate)'))。

修改后的完整代码如下:

$data = DB::table('kahanighar_ivr.kahani_cdr')
            ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"kahani" as ser'))
            ->where('dst','like','%7787%')
            ->wheredate('calldate','>=',"$request->start")
            ->wheredate('calldate','<=',"$request->end")
            ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)'))
            ->union(DB::table('kids_ivr.kids_cdr')
                ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"kids" as ser'))
                ->where('dst','like','%7787%')
                ->wheredate('calldate','>=',"$request->start")
                ->wheredate('calldate','<=',"$request->end")
                ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)')))
            ->union(DB::table('news_ivr.news_cdr')
                ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"news" as ser'))
                ->where('dst','like','%7787%')
                ->wheredate('calldate','>=',"$request->start")
                ->wheredate('calldate','<=',"$request->end")
                ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)')));

其他数据库适配

如果用的是PostgreSQL,把DATE(calldate)换成DATE_TRUNC('day', calldate)或者TO_CHAR(calldate, 'YYYY-MM-DD');SQL Server的话用CAST(calldate AS DATE)。

额外说明

  • DATE()函数会把datetime类型转换成YYYY-MM-DD格式的日期字符串,正好满足只保留日期的需求。
  • 分组依据必须同步改成日期,不然同一天不同时间的记录会被拆成多个分组,统计结果会不准确。

内容的提问来源于stack exchange,提问作者ayesha maqsood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:30:58