如何仅提取时间字段中的时、分、秒(HH:MM:SS格式)
技术百科
霞舞
发布时间:2026-01-28
浏览: 次 本文介绍在 laravel eloquent 查询中,使用 mysql 的 `date_format()` 函数配合 `db::raw()`,从 datetime 类型字段中精准提取并格式化为“小时:分钟:秒”(如 `14:23:05`)的方法。
在实际开发中,数据库表(如 attendance)的 attendance_time 字段通常为 DATETIME 类型,存储完整的时间戳(例如 '2025-05-20 08:45:32')。但业务场景常只需展示“时:分:秒”部分(如考勤打卡时间),此时直接 SELECT in.attendance_time AS in_time 会返回完整日期时间,不符合前端简洁展示需求。
Laravel 原生查询构建器不支持对字段进行原生时间格式化,需借助 DB::raw() 调用底层数据库函数。MySQL 提供了强大的 DATE_FORMAT() 函数,可按指定格式截取并格式化时间部分。
✅ 正确做法是:将原 select() 中的 'in.attendan

DB::raw('DATE_FORMAT(in.attendance_time, "%H:%i:%s") as in_time'),
DB::raw('DATE_FORMAT(out.attendance_time, "%H:%i:%s") as out_time')注意:格式符说明:
- %H → 24 小时制小时(00–23)
- %i → 分钟(00–59)
- %s → 秒(00–59)
- 冒号 : 作为分隔符(也可替换为 - 或空格,如 "%H-%i-%s")
完整修正后的查询片段如下:
$absen = DB::table('attendance as in')
->where('in.in_out', 'in')
->where('in.company_id', \Session::get('selected_company'))
->whereDate('in.created', Carbon::today())
->leftJoin('attendance as out', function ($join) {
$join->on('in.employee_id', 'out.employee_id')
->where('out.in_out', 'out')
->where('out.company_id', \Session::get('selected_company'))
->whereDate('out.created', Carbon::today());
})
->join('employee', 'employee.id', 'in.employee_id')
->join('location_library', 'location_library.id', 'in.attendance_location_id')
->join('company as cp', 'cp.id', 'in.company_id')
->join('employee_in_app as e_app', 'e_app.employee_id', 'in.employee_id')
->join('employee_in_company', 'in.employee_id', 'employee_in_company.employee_id')
->select(
'employee.name',
'cp.alias',
'in.employee_id',
'location_library.location_name',
DB::raw('DATE_FORMAT(in.attendance_time, "%H:%i:%s") as in_time'),
DB::raw('DATE_FORMAT(out.attendance_time, "%H:%i:%s") as out_time'),
'e_app.note'
)
->orderBy('in.attendance_time', 'DESC')
->get();⚠️ 注意事项:
- 此方案依赖 MySQL 数据库;若使用 PostgreSQL,应改用 TO_CHAR(in.attendance_time, 'HH24:MI:SS');
- DATE_FORMAT() 返回字符串类型,不可再用于时间计算或排序(如需排序原始时间,请保留原始字段或额外 SELECT in.attendance_time);
- 若字段可能为 NULL(如员工尚未打卡),DATE_FORMAT(NULL, ...) 返回 NULL,符合预期,无需额外处理;
- Laravel 10+ 中确保已正确引入 use Illuminate\Support\Facades\DB;。
通过该方式,既保持了查询性能(格式化在数据库层完成),又精准满足了 UI 层对纯时间格式的展示需求。
# 能为
# 只需
# 也可
# 如需
# app
# 不支持
# 再用
# ui
# 字符串
# 数据库
# red
# NULL
# 前端
# session
# cad
# select
# mysql
# postgresql
# 不符合
# 分隔符
# laravel
# 字符串类型
# 可按
# 将原
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10如何优化内存使用_Win10内存优化技巧
- Windows10电脑怎么设置电源按钮_Win10
- php485函数怎么捕获异常_php485错误处理
- Win11怎么开启自动HDR画质_Windows1
- Windows执行文件被SmartScreen拦截
- Win11怎么设置默认邮件应用_Windows11
- Win11怎么查看电脑配置_Win11硬件配置详细
- Win11如何设置文件关联 Win11修改特定文件
- Python项目回滚策略_发布安全说明【指导】
- Win11怎么关闭通知中心_Windows11系统
- c++中如何进行二进制文件读写_c++ read与
- 如何有效拦截拼接式恶意域名的垃圾信息
- VSC怎么配置PHP的Xdebug_远程调试设置步
- Win10怎么关闭自动更新错误弹窗_Win10策略
- 为什么本地php环境运行php脚本卡顿_php执行
- Win11怎么把图标拖到任务栏_Win11固定应用
- MAC怎么设置程序窗口永远最前_MAC窗口置顶插件
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- 如何在Golang中处理模块包路径变化_Golan
- Windows10怎样连接蓝牙设备_Windows
- 如何在Golang中处理URL参数_Golang
- Windows服务启动类型恢复方法_错误修改导致的
- Windows怎样拦截WPS弹窗广告_Window
- 如何使用Golang指针与结构体结合_修改结构体内
- c++怎么调用nana库开发GUI_c++ 现代风
- Python变量绑定机制_引用模型解析【教程】
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- php485函数执行慢怎么优化_php485性能提
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- php订单日志怎么记录物流_php记录订单物流变更
- Python技术债务管理_长期维护解析【教程】
- Win11怎么关闭系统声音_Win11系统提示音静
- Win11怎么关闭粘滞键_彻底禁用Windows
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Win11怎么更改系统语言_Win11中文语言包下
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- php下载安装选zip还是msi格式_两种安装包对
- 微信里的php文件怎么变mp4_微信接收php转m
- Python装饰器复用技巧_通用能力解析【教程】
- Win11如何卸载OneDrive_Win11卸载
- LINUX怎么进行文本内容搜索_Linux gre
- Win11怎么关闭键盘按键音_Win11禁用打字声
- 电脑的“网络和共享中心”去哪了_Windows 1
- Windows10蓝屏代码DPC_WATCHDOG
- Windows驱动无法加载错误解决方法_驱动签名验
- 如何高效获取循环末次生成的 NumPy 数组最后一
- 如何使用Golang实现微服务事件驱动_使用消息总
- php本地部署支持nodejs吗_php与node
- Windows10怎么备份注册表_Windows1

QQ客服