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
相关产品推荐
相关产品推荐

