Проблема преобразования даты из загрузчика даты в другой формат - PullRequest
0 голосов
/ 05 февраля 2019

Работа над приложением, в котором я собираю некоторые поля ввода с помощью загрузчика даты начальной загрузки.Я показываю формат в формате дд / мм / гг для пользователя, который работает нормально.В бэкэнде (сборка в Laravel PHP) мне нужно преобразовать его в формат yy-mm-dd, который является необходимым форматом для хранения поля даты в API.

В контроллере, когда я сбрасываю данныеЯ получаю 28/01/2019, но когда я конвертирую его, я получаю 1970-01-01.В чем может быть проблема?

Разметка

<div class="form-line registar love {{ $errors->has('dob') ? ' has-error' : '' }}">
    <input type="text" placeholder="Date of Birth *" class="form-input dateTextBox" name="dob" id="dob" value="{{isset($user->dob) ? $user->dob : old('dob') }}" required>
</div>

Логика Javascript (сборщик данных Bootstrap)

 var maxBirthdayDate = new Date();
maxBirthdayDate.setFullYear( maxBirthdayDate.getFullYear() - 18 );
maxBirthdayDate.setMonth(11,31);
$( function() {
  $( "#dob" ).datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'dd/mm/yy',
    maxDate: maxBirthdayDate,
    yearRange: '1900:'+maxBirthdayDate.getFullYear(),
  });
});

логика контроллера

public function validateDate(Request $request){   
        //dd($request->dob);

        //28/02/2019 after dd() above

        //Convert 
        $dobCv = date("Y-d-m", strtotime($request->dob));

        dd($dobCv);

        //1970-01-01 after dd() above
}

Ответы [ 5 ]

0 голосов
/ 05 февраля 2019

У вас проблема, потому что прямая косая черта (/) означает американское форматирование M / D / Y в strtotime, а в вашем примере 28/02/2019 28 - месяц.Так что strtotime возвращает false.Я рекомендую вам использовать библиотеку Carbon, как было сказано выше, или изменить / на -, если хотите, чтобы ваш путь:

$dobCv = date("Y-d-m", strtotime(str_replace('/', '-', $request->dob)));

0 голосов
/ 05 февраля 2019

Изменение типа ввода текста в дату может помочь вам.например: <input type="date" .......>

0 голосов
/ 05 февраля 2019

Закодируйте его в формате json и отправьте на контроллер

0 голосов
/ 05 февраля 2019

Вы можете просто использовать Carbon:

$dobCv = Carbon::createFromFormat('d/m/Y', $request->dob)->format('Y-m-d');

И не забудьте импортировать:

use Carbon\Carbon;
0 голосов
/ 05 февраля 2019

Почему бы вам не использовать Laravel build в Carbon

$date = Carbon::createFromFormat('d/m/Y', $date);

Тогда вы можете сделать $date->toDateTimeString(); или все, что вы хотите сделать с Carbonдата объекта

...