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/
嘿,我正在为日期格式苦苦挣扎。我需要调整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/