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

PHP给数据库取出的timestamp字段加1小时不生效,正确写法是什么?

问题根源

你调用date()函数时参数顺序完全写反了,该写法没有被弃用,属于参数使用错误:
PHP内置date()函数的语法为date(string $格式, int $时间戳 = 当前时间戳),第一个参数是你想要输出的时间格式,第二个参数才是要处理的时间戳值。你原本的写法把从数据库取的时间值当成了格式参数传入,自然不会得到预期结果。

正确实现方案

方案1:date() + strtotime() 写法

先把数据库取出的timestamp字段值转成时间戳,再做一小时偏移后格式化:

// 示例格式为年-月-日 时:分:秒,可按需修改第一个参数的格式规则
echo date('Y-m-d H:i:s', strtotime('+1 hour', strtotime($ls['created_at'])));
// 也可以直接给时间戳加3600秒(1小时),写法更直接
echo date('Y-m-d H:i:s', strtotime($ls['created_at']) + 3600);

如果你的$ls['created_at']已经是数值类型的时间戳,不需要额外调用strtotime()转换,直接使用即可:

echo date('Y-m-d H:i:s', $ls['created_at'] + 3600);

方案2:DateTime类写法(更推荐,避免时区、格式兼容问题)

$createTime = new DateTime($ls['created_at']);
$createTime->modify('+1 hour');
echo $createTime->format('Y-m-d H:i:s');

注意事项

  • 提前配置PHP时区,避免时间偏移不符合预期:可以在php.ini中设置date.timezone = PRC,或者在代码执行前加一行date_default_timezone_set('Asia/Shanghai');
  • 确认数据库取出的created_at值为合法的时间格式字符串或数值时间戳,避免strtotime()解析失败返回0,导致时间变成1970年的初始值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:54:02