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

PHP提取XML日期修改输出格式时date()函数无法生效问题求助

问题原因

你直接使用date()函数不生效,是因为PHP默认把带/分隔符的日期识别为月/日/年的美式格式,你传入的25/11/2021中25超过了月份的合法范围,解析失败自然无法输出正确结果。


解决方案

使用DateTime::createFromFormat方法手动指定输入日期的格式,即可正确解析,同时支持拆分多个变量存储不同日期部分,修改后的代码如下:

#search for all event start dates
$starts = $sxml->xpath('//event/startdate');

#get the unique start dates of these event
$dates = array_unique($starts);

foreach($dates as $date) {
    // 指定输入格式为 日/月/年 解析原始日期
    $dateObj = DateTime::createFromFormat('d/m/Y', $date);
    if ($dateObj) { // 增加校验,避免日期格式异常时报错
        // 拆分单独变量存储对应部分(按需取用即可)
        $weekday = $dateObj->format('l'); // 完整星期名,示例值:Thursday
        $day = $dateObj->format('d'); // 日期,示例值:25
        $month = $dateObj->format('F'); // 完整月份名,示例值:November
        $year = $dateObj->format('Y'); // 4位年份,示例值:2021

        // 拼接为目标格式输出
        $outputDate = "{$weekday} {$day} {$month} {$year}";
        echo "<li class='header'><h1>{$outputDate}</h1></li>" . "\n";
    }
}

补充说明

  • 如果你需要输出中文的星期/月份,可在代码开头增加区域配置:setlocale(LC_TIME, 'zh_CN.UTF-8');,再使用strftime('%A %e %B %Y', $dateObj->getTimestamp())即可得到中文格式的日期。
  • 如果原始日期的日、月存在无前导零的情况,把解析格式符调整为j/n/Y即可兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:03