如何解析德语格式日期字符串并判断是否早于当前日期?
解决方案
要解析德语格式的日期字符串并比较日期,核心是让PHP识别德语的星期和月份名称,以下是可行的实现步骤:
- 先设置德语区域设置:PHP的日期解析依赖系统locale,必须将
LC_TIME设置为德语相关的locale,才能识别Freitag(德语星期五)这类本地化日期标识。 - 使用
DateTime::createFromFormat结合指定格式解析字符串。 - 提取日期的年、月、日部分,与当前日期的对应部分比较。
完整代码示例
// 尝试设置兼容多系统的德语区域 $possibleLocales = ['de_DE.UTF-8', 'de_DE', 'German_Germany.1252']; $localeSuccess = false; foreach ($possibleLocales as $locale) { if (setlocale(LC_TIME, $locale) !== false) { $localeSuccess = true; break; } } if (!$localeSuccess) { exit('无法加载德语区域配置,无法解析日期'); } $inputDateStr = 'Freitag - 09. September 2022 - 14:00'; $dateFormat = 'l - d. F Y - H:i'; // 解析日期字符串 $parsedDate = DateTime::createFromFormat($dateFormat, $inputDateStr); if (!$parsedDate) { exit('日期解析失败,请检查格式匹配'); } // 提取仅年月日的字符串用于比较 $targetDate = $parsedDate->format('Y-m-d'); $today = date('Y-m-d'); // 执行比较 if ($targetDate < $today) { echo '该日期早于当前日期'; } else { echo '该日期不早于当前日期'; }
关键说明
- 不同操作系统的locale名称不同:Linux类系统常用
de_DE.UTF-8,Windows系统常用German_Germany.1252,所以代码中尝试多个可能的locale值确保兼容性。 - 解析时必须严格匹配格式字符串:
l对应完整星期名(德语),F对应完整月份名(德语),格式字符串必须和输入字符串的结构完全一致。 - 比较时只取年月日部分:通过
format('Y-m-d')统一格式后,直接字符串比较即可得到正确结果。
内容的提问来源于stack exchange,提问作者Rick H.
相关产品推荐
相关产品推荐

