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

如何使用PHP读取XML节点中带时区的DateTime格式日期

问题原因

你无法读取带时区的日期节点,不是因为节点值中的冒号导致的,核心问题是SimpleXMLElement返回的节点值是SimpleXMLElement对象类型,而非原生字符串,直接赋值或非字符串上下文调用时不会自动输出完整内容。你测试短日期格式时看似正常读取,是因为短值在弱类型输出场景下PHP自动触发了对象的__toString()方法,属于巧合。

解决方案

只需要在读取节点值时显式强转为字符串即可拿到完整的ISO 8601格式日期,PHP原生支持该格式的日期解析,不需要额外处理:

$xml = new XMLReader();
$xml->open('file.xml');

while( $xml->read() ){
    if($xml->nodeType == XMLReader::ELEMENT && $xml->nodeType != XMLReader::END_ELEMENT && $xml->name == 'service'){
        $inner = new SimpleXMLElement($xml->readOuterXml());
        // 显式强转为字符串即可获取完整日期值
        $date = (string)$inner->date;
        // 若后续需要处理日期,可直接用DateTime类解析该格式
        $dateInstance = new DateTime($date);
        // 示例:输出为Y-m-d格式 2018-10-26
        // echo $dateInstance->format('Y-m-d');
    }
}

你可以通过var_dump($inner->date)验证节点类型,确认返回值为对象类型,强转后即可正常使用。

内容的提问来源于stack exchange,提问作者Joao Rennato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:00