Эй, я борюсь с форматом даты. Мне нужно настроить отображение некоторых дат в проекте wordpress.
Это не дубликат Этот вопрос. Я попробовал это предложение, и оно не работает с этим конкретным форматом даты.
У меня есть german date
в формате D, d. MM yyyy
, который выглядит так: Fr, 6. Mai 2022
Я хочу преобразовать его в yyyy-mm-dd
= 2022-05-06
, но не могу заставить его работать. Я пытался использовать date_parse_from_format и 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');
Тоже не работает, возвращает: 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/.
Возможно известная ошибка: bugs.php.net/bug.php?id=77733
Теперь это работает после того, как я изменил шаблон на «EEE, d. МММ гггг'
@xDrago это также работает EEEEEE, d. MMM y
Я ошибся с константой года и использовал «недельный год», а не фактический год
Спасибо, но, к сожалению, ваш код возвращается
2021-12-31