PHP使用DateTime::createFromFormat转时间戳提示Incorrect date string怎么解决
问题排查与解决方案
报错原因
你的代码解析失败的核心原因是 DateTime::createFromFormat 传入的格式模板与实际输入的日期字符串结构完全不匹配:
- 你指定的模板
d-m-Y H:i:s对应「日-月-年 时:分:秒」的结构,仅能匹配15-07-2021 19:00:00这类格式的字符串 - 你实际输入的
2021-07-15T19:00:00.000Z是带毫秒、UTC标识的标准ISO 8601格式,和模板规则完全不符,因此返回false触发报错。
修复方案
方案1:使用匹配的格式模板
你可以选择手写匹配的模板,注意需要转义字符串里的固定字符T和Z,用u匹配毫秒位:
$d = DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', '2021-07-15T19:00:00.000Z'); if ($d === false) { die("Incorrect date string"); } else { echo $d->getTimestamp(); }
也可以直接使用PHP内置的DATE_RFC3339_EXTENDED常量代替手写模板,避免格式写错:
$d = DateTime::createFromFormat(DATE_RFC3339_EXTENDED, '2021-07-15T19:00:00.000Z');
方案2:直接自动解析标准格式
PHP的DateTime类原生支持解析标准ISO 8601格式的字符串,不需要手动指定格式,写法更简洁:
$d = new DateTime('2021-07-15T19:00:00.000Z'); echo $d->getTimestamp();
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

