PHP日期显示问题:德语星期格式输出被截断如何解决?
问题原因及解决方案
核心问题:预定义格式与自定义模式冲突
你初始化IntlDateFormatter时,同时传入了预定义日期格式常量(IntlDateFormatter::LONG)和自定义格式模式(最后一个参数的"EEEE', ' H:i Uhr"),这会触发内部解析冲突,最终导致输出截断。另外,自定义模式里的单引号使用冗余,且第一个DateTime实例被后续赋值完全覆盖,属于无效代码。
修复后的代码
function getDatetime($match) { // 直接传入时间字符串并指定时区,避免解析偏差 $datetime = new DateTime($match["matchDateTime"], new DateTimeZone("Europe/Berlin")); $formatter = new IntlDateFormatter( "de-DE", IntlDateFormatter::NONE, // 使用自定义模式时,需将预定义格式设为NONE IntlDateFormatter::NONE, "Europe/Berlin", IntlDateFormatter::GREGORIAN, "EEEE, H:i Uhr" // 修正格式,去掉多余单引号 ); return $formatter->format($datetime); }
关键说明
- 使用
IntlDateFormatter的自定义格式模式时,必须将前两个参数(日期、时间的预定义格式)都设为IntlDateFormatter::NONE,否则预定义格式会干扰自定义模式的解析逻辑。 - 初始化
DateTime时直接指定目标时区,避免服务器默认时区差异导致的时间解析错误。
内容的提问来源于stack exchange,提问作者Theo Dor
相关产品推荐
相关产品推荐

