Измените формат даты $_REQUEST на другой: Mer. с 23 января 2019 г. по 23 января 2019 г

У меня есть средство выбора даты начальной загрузки в одной из моих форм, где я показываю дату в этом формате:

D. d MM yyyy (displayed : Mer. 23 Janvier 2019)

Поскольку я не могу сохранить дату в своей таблице в этом формате, я получаю отправленное значение с помощью $_REQUEST, прежде чем я сохраню его в столбце таблицы и захочу изменить его формат.

Я пытался :

$deliverydate = $_REQUEST['delivery_date'];
$deliverydate_conv = $deliverydate->format('Y-m-d');

or

$deliverydate_conv = $deliverydate->format('Y-mm-dd');

но когда я

dd($deliverydate);

значение, то я получаю сообщение об ошибке:

Call to a member function format() on string

Я также пробовал:

        $deliverydate = $_REQUEST['delivery_date'];
        $deliverydate_conv = date("m-d-Y", strtotime($deliverydate));

Дата возвращается, но:

01-01-1970

Мой код:
. публичная функция hook_before_add(&$postdata) {

# START POPULATE the deliverydate FIELD

# QUERY
# SQL : GET the deliverydate FIELD

$deliverydate = $_REQUEST['delivery_date'];
$deliverydate_conv = date("m-d-Y", strtotime($deliverydate));
dd($deliverydate);

# UPDATE THE deliverydate FIELD WITH THE RETURNED VALUE

DB::table('orders')
->where('orderID', '=', $id)
->update(array('deliverydate' => $deliverydate_conv));

# END POPULATE the deliverydate FIELD

}

Я хотел бы преобразовать свой код в:

2019-01-23

чтобы иметь возможность сохранить его в столбце таблицы дат.

клиентская сторона уже должна опубликовать изодат; подход PHP весьма сомнителен. типичная проблема X/Y: meta.stackexchange.com/questions/66377/what-is-the-xy-proble‌​m

Martin Zeitler 20.01.2019 05:06

это «непонятно, о чем вы спрашиваете» - потому что весь код JS был опущен.

Martin Zeitler 20.01.2019 05:10

Спасибо за ваш опыт, это действительно помогает. Наслаждаться.

marcq 20.01.2019 06:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
3
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Поскольку вы пытаетесь проанализировать локализованную строку даты, вам нужно будет использовать класс из расширения Intl PHP, убедитесь, что он установлен.

Вы можете использовать класс IntlDateFormatter для определения средства форматирования, которое может понимать французские даты. Затем вы указываете формат даты, который вы используете, и, наконец, анализируете дату. Он создаст отметку времени Unix, которую вы можете использовать с date().

$formatter = new IntlDateFormatter("fr_FR", IntlDateFormatter::NONE, IntlDateFormatter::NONE);
$formatter->setPattern('eee dd MMMM y');

$time = $formatter->parse("Mer. 23 Janvier 2019");

$date = date('Y-m-d', $time);

Вы можете изменить шаблон на другой, который соответствует вашим потребностям, используя эти флаги: http://userguide.icu-project.org/formatparse/datetime

date() использует их в качестве своего формата http://php.net/manual/en/function.date.php.

И вы можете протестировать приведенный выше код на этом сайте: http://www.writephponline.com

Применительно к вашему случаю вам нужно будет проанализировать $deliverydate и использовать его возврат в качестве второго аргумента для date().

Большое спасибо Гильерме за ваше четкое объяснение, которое говорит со мной, к сожалению, Laravel не распознал этот класс: класс «App\Http\Controllers\IntlDateFormatter» не найден. Поэтому сначала мне нужно найти способ заставить его работать в Laravel, я буду держать в курсе.

marcq 20.01.2019 05:48

Две вещи: во-первых, класс находится в глобальном пространстве имен, вы должны либо добавить оператор use, либо назвать его как \IntlDateFormatter. Во-вторых, даже если вы правильно настроили пространства имен, на вашем сервере должно быть установлено это расширение. Поскольку мы не знаем ваш стек, вот ссылка на раздел руководства по установке. php.net/manual/en/intl.installation.php

Guilherme Vieira 20.01.2019 06:10

Вы прибили это, теперь это работает! Большое спасибо за ваше время и опыт. Привет, Марк

marcq 20.01.2019 06:49

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