PHP日期显示错误主因是时区未设或时间格式处理不当:需用date_default_timezone_set('Asia/Shanghai')设时区,且date()第二参数必须为时间戳,MySQL日期字符串须经strtotime()或DateTime转换。

Dreamweaver 里 PHP 日期显示错误,通常不是 Dreamweaver 的问题,而是 PHP 代码中 date()、strtotime() 或时区配置没设对——DW 只是编辑器,不执行 PHP,真正出错的是你本地环境或服务器上的 PHP 解析逻辑。
检查 date_default_timezone_set() 是否缺失
PHP 7.0+ 默认不设时区,调用 date() 会触发 Warning: date(): It is not safe to rely on the system's timezone settings,且返回时间可能偏差 8 小时(比如显示成 UTC 而非北京时间)。
在所有用 date() 前加一行:
date_default_timezone_set('Asia/Shanghai');
常见错误写法:date_default_timezone_set('PRC')(已废弃)、'GMT+8'(不被支持)、漏写或写在 date() 调用之后。
立即学习“PHP免费学习笔记(深入)”;
- 必须放在
date()、strtotime()、DateTime初始化之前 - 推荐用 IANA 时区名,如
'Asia/Shanghai',不是'China/Beijing'(后者不存在) - 若部署到共享主机,有些环境禁止运行该函数,需改用
php.ini设置date.timezone = Asia/Shanghai
date() 格式字符写错导致输出乱码或空值
比如写成 date('Y-m-d H:i:s', $time) 却传入字符串 '2024-05-20',而没用 strtotime() 转成时间戳,结果返回 1970-01-01;或者格式符大小写混淆(h 是 12 小时制,H 是 24 小时制)。
典型错误场景:
-
date('Y-m-d', '2024-05-20')→ 错,第二个参数必须是整数时间戳 -
date('y-m-d')→ 年份只输出两位(24-05-20),不是2024-05-20 -
date('Y-m-d G:i:s')→G是 24 小时制无前导零,容易和H混,建议统一用H
安全写法示例:
$time = strtotime('2024-05-20 14:30:00');
echo date('Y-m-d H:i:s', $time); // 输出:2024-05-20 14:30:00
从 MySQL 读出的日期直接丢给 date() 报错
MySQL 返回的 DATETIME 字段是字符串(如 '2024-05-20 14:30:00'),不能直接当时间戳用。常见错误:date('Y-m-d', $row['created_at']),结果全变成 1970-01-01。
正确做法分两步:
- 先转时间戳:
strtotime($row['created_at']) - 或用
DateTime类(更健壮):(new DateTime($row['created_at']))->format('Y-m-d H:i:s') - 如果字段是
INT存的时间戳,确认它确实是秒级(不是毫秒),否则要除以 1000
注意:PDO 默认把 DATETIME 当字符串取,不会自动转 DateTime 对象,除非你显式设置 PDO::ATTR_EMULATE_PREPARES => false 并启用 PDO::ATTR_STRINGIFY_FETCHES => false(不推荐初学者折腾)。
真正卡住人的地方往往不在 DW 界面,而在你没意识到 PHP 运行时环境(本地 WAMP/XAMPP vs 远程 Linux 主机)的时区默认值不同,以及 MySQL 字段类型和 PHP 时间处理之间的隐式转换规则——这些细节一漏,date() 就静默返回错值,而不是报错。











