PHP |将特定的德语日期格式解析为 yyyy-mm-dd

PHP | Parse specific german date format to yyyy-mm-dd

嘿,我正在为日期格式苦苦挣扎。我需要调整wordpress项目中一些日期的显示。

它不是 的副本我尝试了那里的建议,但它不适用于该特定日期格式。

我的 german date 格式 D, d. MM yyyy 看起来像这样:Fr, 6. Mai 2022

我想将它转换为 yyyy-mm-dd = 2022-05-06 但我无法让它工作。我曾尝试使用 date_parse_from_format and date_create_from_format,但由于德国月份和日期的名称,它似乎失败了。

$date_german = 'Fr, 6. Mai 2022';
$date_english = 'Fri, 6. May 2022';
print_r(date_create_from_format('D, d. F Y', $date_german)); // doesn't work
print_r(date_create_from_format('D, d. F Y', $date_english)); // works ()

再次尝试使用 IntlDateFormatter

$date = 'Fr, 6. Mai 2022';
$formatter = new IntlDateFormatter("de_DE", IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
$formatter->setPattern('D, d. F Y');
$unixtime=$formatter->parse($date);
$datetime=new DateTime();
$datetime->setTimestamp($unixtime);
echo $datetime->format('Y-m-d');

也不工作,它 returns: 1970-01-01 因为 $unixtime 是空的?

我也试过在格式化前将Locale设置为de_DE,但还是一样的问题。

IMO 正确的做法确实是使用 IntlDateFormatter 但是你使用了错误的格式常量。

这应该有效:

$date = 'Fr, 6. Mai 2022';
$formatter = new IntlDateFormatter("de_DE", IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
$formatter->setPattern('EEEEEE, d. MMM y');
$unixtime=$formatter->parse($date);
$datetime=new DateTime();
$datetime->setTimestamp($unixtime);
echo $datetime->format('Y-m-d');

intl 的常量列表位于 https://unicode-org.github.io/icu/userguide/format_parse/datetime/