Проверка поля даты_формата Laravel в обратном направлении? - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь определить, где проблема здесь.Я беру что-то вроде «01-02-2018» для ссылки на 02 января 2018. Затем создаю переменную, чтобы исправить ее как стандартный формат даты 2018-01-02 для mySQL, и сохраняю ее.Однако, когда он сохраняет, он сохраняет его как 2018-02-01, перенося месяц и день, который представляет 01 февраля 2018. Вот как выглядит мой код:

Проверка

'prescribe_date' => 'nullable|date_format:"m-d-Y"|max:10',

Исправить

$prescribe_dateFix = date('Y-m-d', strtotime($request->prescribe_date));

Сохранить

$prescription->prescribe_date = $prescribe_dateFix;

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

strtotime будет интерпретировать вашу дату как d-m-Y по умолчанию, поэтому будет думать, что это 1 февраля.Из руководства:

Примечание:

Даты в форматах m / d / y или dmy устранены неоднозначностью, если взглянуть на разделитель между различными компонентами: если разделитель является косой чертой(/), тогда предполагается американский м / д / у;тогда как если в качестве разделителя используется тире (-) или точка (.), то предполагается, что используется европейский формат dmy.

Вместо него необходимо использовать date_create_from_format:

$request = (object)['prescribe_date' => '01-02-2018'];
$prescribe_dateFix = date_create_from_format('m-d-Y', $request->prescribe_date)->format('Y-m-d');
echo $prescribe_dateFix;

Выход:

2018-01-02
0 голосов
/ 07 октября 2018

Для достижения этой цели можно использовать встроенную библиотеку Carbon для умной работы с датами в PHP:

// Perform validation and then...
$prescription->prescribe_date = Carbon::createFromFormat('m-d-Y', $request->prescribe_date);
$prescription->save();

Конечно, вы также должны указать, что поле prescribe_date является датойв соответствующем классе модели (см. https://laravel.com/docs/5.7/eloquent-mutators#date-mutators):

В Prescription класс модели:

protected $dates = [
    'created_at',
    'updated_at',
    'prescribe_date'
];
0 голосов
/ 07 октября 2018

Вы можете попробовать это.

$prescribe_dateFix = date_format($request->prescribe_date, 'Y-m-d')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...