将日期从 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 是月份。所以strtotime
returnsfalse
。我建议您使用上面所说的 Carbon
库,或者如果您愿意,可以将 /
更改为 -
:
$dobCv = date("Y-d-m", strtotime(str_replace('/', '-', $request->dob)));
正在开发一个应用程序,使用 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 是月份。所以strtotime
returnsfalse
。我建议您使用上面所说的 Carbon
库,或者如果您愿意,可以将 /
更改为 -
:
$dobCv = date("Y-d-m", strtotime(str_replace('/', '-', $request->dob)));