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

如何将时间戳转为指定字符串格式并在搜索功能中正确使用?

问题原因及解决方法

错误原因

你把PHP的日期处理函数直接写到了Laravel的查询条件里,导致两个问题:

  1. PHP会先执行date('D, M dS Y g:i a', strtotime('timestamp')),但strtotime('timestamp')无法解析字符串"timestamp",返回时间戳0,对应日期Thu, Jan 01st 1970 5:30 am
  2. Laravel把这个执行结果当成了数据库的列名,数据库找不到该列,因此抛出Column not found错误

正确写法

数据库有自己的日期格式化函数,不能用PHP的date/strtotime,要根据数据库类型,用原生SQL的日期处理函数转换格式后再搜索。

情况1:数据库字段是datetime类型(以MySQL为例)

用DATE_FORMAT函数转换格式,结合whereRaw执行原生SQL:

$table->where("main.no", "like", "%{$searchfield}%")
      ->orWhereRaw("DATE_FORMAT(timestamp, '%a, %b %D %Y %h:%i %p') LIKE ?", ["%{$searchfield}%"]);

格式符对应关系:

  • %a → PHP的D(星期缩写,如Thu)
  • %b → PHP的M(月份缩写,如Mar)
  • %D → PHP的S(带后缀的日期,如01st)
  • %Y → PHP的Y(4位年份)
  • %h → PHP的g(12小时制小时)
  • %i → PHP的i(分钟)
  • %p → PHP的a(AM/PM,MySQL返回大写,搜索时不区分大小写不影响)

情况2:数据库字段是int类型的时间戳(以MySQL为例)

先通过FROM_UNIXTIME把时间戳转成datetime,再格式化:

$table->where("main.no", "like", "%{$searchfield}%")
      ->orWhereRaw("DATE_FORMAT(FROM_UNIXTIME(timestamp), '%a, %b %D %Y %h:%i %p') LIKE ?", ["%{$searchfield}%"]);

注意事项

  • 用?占位符是为了避免SQL注入,不要直接把$searchfield拼进SQL字符串
  • 如果使用非MySQL数据库,需替换为对应数据库的日期格式化函数(比如PostgreSQL用TO_CHAR)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:18