PHP | Разобрать специальный немецкий формат даты в гггг-мм-дд

Эй, я борюсь с форматом даты. Мне нужно настроить отображение некоторых дат в проекте 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 перед форматированием, но проблема осталась той же.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Правильный способ 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/.

Спасибо, но, к сожалению, ваш код возвращается 2021-12-31

xDrago 07.05.2022 00:27

Возможно известная ошибка: bugs.php.net/bug.php?id=77733

Jim 07.05.2022 02:48

Теперь это работает после того, как я изменил шаблон на «EEE, d. МММ гггг'

xDrago 07.05.2022 08:53

@xDrago это также работает EEEEEE, d. MMM y Я ошибся с константой года и использовал «недельный год», а не фактический год

apokryfos 07.05.2022 11:12

Другие вопросы по теме