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
相关产品推荐
相关产品推荐

