将日期从 bootstrap 日期选择器转换为其他格式时出现问题

Problem converting date from a bootstrap datepicker to a different format

正在开发一个应用程序,使用 bootstrap 日期选择器捕获一些输入字段。我以 dd/mm/yy 格式向用户显示格式,效果很好。在后端(内置 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逻辑(Bootstrapdatpicker)

 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
}

为什么不使用 Laravel 内置 Carbon

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

然后你可以$date->toDateTimeString();或任何你想用 Carbon 日期对象做的事情

编码成json格式发送给控制器

您可以简单地使用 Carbon :

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

并且不要忘记导入:

use Carbon\Carbon;

将输入类型文本更改为日期可能会对您有所帮助。 例如:<input type="date" .......>

您遇到问题是因为正斜杠 (/) 在 strtotime 中表示美式 M/D/Y 格式,在您的示例中 28/02/2019 28 是月份。所以strtotimereturnsfalse。我建议您使用上面所说的 Carbon 库,或者如果您愿意,可以将 / 更改为 -

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