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

PHP DateTime格式转换异常:为何两个时间值差异巨大?

问题原因分析

你的问题核心在于**strtotime()无法正确识别你用连字符-分隔的时间格式**,导致时间戳解析失败,最终返回了Unix纪元时间(01-Jan-1970 01:00:00是时区偏移后的显示结果)。

具体拆解来看:

  • 你的原始时间字符串是31-May-2018 19-15-28,其中时间部分用-代替了标准的:分隔符。strtotime()对这种非标准时间格式的兼容性很差,它没法把19-15-28识别为有效的时分秒,因此第一次调用strtotime($Record['DateTime'])会返回false。
  • 当date()函数收到false作为时间戳参数时,会自动把它当作0(Unix纪元的起始时间)处理,所以$DateTime实际上是纪元时间转成d-M-Y H-i-s格式的字符串。
  • 第二次调用strtotime($DateTime)依然无法解析这个无效的时间字符串,再次返回false,最终Send_Time就变成了纪元时间。
解决方案:使用DateTime类解析自定义格式

相比依赖strtotime()的自动解析,PHP的DateTime类支持手动指定格式来解析非标准时间字符串,可靠性高得多。修改你的代码如下:

<?php 
$Record['DateTime']='31-May-2018 19-15-28'; 
// 用指定格式解析原始时间字符串
$dt = DateTime::createFromFormat('d-M-Y H-i-s', $Record['DateTime']);
// 转换为你需要的格式
$Record['Send_Time'] = $dt->format('d-M-Y H:i:s'); 
print_r($Record); 
?>

运行这段代码后,Send_Time会正确输出31-May-2018 19:15:28。

额外提示
  • 尽量避免用strtotime()处理非标准时间格式,它的解析规则依赖系统环境,很容易出现不可预期的结果。
  • 如果需要在不同时间格式间转换,DateTime::createFromFormat() + format()是更稳定的组合。

内容的提问来源于stack exchange,提问作者Rajib Hossain Pavel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:22