У меня есть средство выбора даты начальной загрузки в одной из моих форм, где я показываю дату в этом формате:
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
чтобы иметь возможность сохранить его в столбце таблицы дат.
это «непонятно, о чем вы спрашиваете» - потому что весь код JS был опущен.
Спасибо за ваш опыт, это действительно помогает. Наслаждаться.






Поскольку вы пытаетесь проанализировать локализованную строку даты, вам нужно будет использовать класс из расширения 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, я буду держать в курсе.
Две вещи: во-первых, класс находится в глобальном пространстве имен, вы должны либо добавить оператор use, либо назвать его как \IntlDateFormatter. Во-вторых, даже если вы правильно настроили пространства имен, на вашем сервере должно быть установлено это расширение. Поскольку мы не знаем ваш стек, вот ссылка на раздел руководства по установке. php.net/manual/en/intl.installation.php
Вы прибили это, теперь это работает! Большое спасибо за ваше время и опыт. Привет, Марк
клиентская сторона уже должна опубликовать изодат; подход PHP весьма сомнителен. типичная проблема X/Y: meta.stackexchange.com/questions/66377/what-is-the-xy-problem