У меня есть таблица log_leave, как показано ниже.
id | name | request_day_leave | start_leave | end_leave
1 Michael 5 2019-04-01 2019-04-05
2 Johan 3 2019-04-08 2019-04-011
Я хочу изменить отображение даты в форме просмотра лезвия, поэтому, когда пользователь нажимает дату, он показывает дд-мм-гг. И когда пользователь видит отчет журнала, он выглядит так, как показано ниже.
id | name | request_day_leave | Leave Start | Leave End
1 Michael 5 01-04-2019 05-04-2019
2 Johan 3 08-04-2019 11-04-2019
Я изменил формат средства выбора даты в представлении формы, но когда мне нужно сохранить дату в базе данных, отображается сообщение об ошибке, как показано ниже.
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '08-04-2019' for column 'from_date' at row 1
Я попытался использовать мутатор в модели и добавил новое значение в config/app.php, но все равно получил то же сообщение об ошибке.
Вот код конфигурации/приложения
'date_format' => 'd/m/Y',
'date_format_js' => 'dd/mm/yy'
Вот код выбора даты
$('#from').datepicker({
showOnFocus: false,
showTrigger: '#calImg',
beforeShowDay: noWeekendsOrHolidays,
numberOfMonths: 1,
dateFormat: 'dd-mm-yy'
});
$('#to').datepicker({
showOnFocus: false,
showTrigger: '#calImg',
beforeShowDay: noWeekendsOrHolidays,
pickerClass: 'noPrevNext',
numberOfMonths: 1,
dateFormat: 'dd-mm-yy'
});
});
Вот код в модели Log Leave
class LogLeave extends Model
{
//
protected $table = 'log_leave';
public function setEntryDateAttribute($input)
{
$this->attributes['start_leave'] =
Carbon::createFromFormat(config('app.date_format'), $input)->format('dd-mm-yy');
$this->attributes['end_leave'] =
Carbon::createFromFormat(config('app.date_format'), $input)->format('dd-mm-yy');
}
}
Как исправить эту проблему?
Спасибо
Привет @SonamTripathi, да, я хочу, чтобы когда журнал просмотра пользователя оставался в представлении формы, в дате начала и дате окончания он отображался в формате д-м-г вместо базового формата базы данных (г-м-д)
Да, я понял твою озабоченность. Вам нужно не менять формат в представлении, просто сделайте то же самое, как только форма будет отправлена на стороне PHP.
Привет, да, спасибо за ваше предложение, я думаю, что в базе данных формат будет по умолчанию, все, что мне нужно, это изменить формат, когда в поле зрения
Я снова думаю, что формат() не требуется
Carbon::createFromFormat('d/m/Y',$input);
или
Carbon::createFromFormat(config('app.date_format'), $input);
Я думаю, что вы получаете ввод в виде строки, поэтому вы можете получить эту ошибку $date = strtotime($input); Carbon::createFromFormat(config('app.date_format'), date('d/m/Y', $date));
Вы должны преобразовать формат в гггг-мм-дд при сохранении в базе данных
public function setEntryDateAttribute($input)
{
$this->attributes['start_leave'] =
Carbon::createFromFormat(config('app.date_format'), $input)->format('Y-m-d');
//should be format('Y-m-d') not format('dd-mm-yy')
$this->attributes['end_leave'] =
Carbon::createFromFormat(config('app.date_format'), $input)->format('Y-m-d');
//same applies here
}
А затем используйте средства доступа для форматирования значения в формате дд-мм-гггг.
public function getStartLeaveAttribute($value)
{
return Carbon::parse($value)->format('d-m-Y');
}
public function getEndLeaveAttribute($value)
{
return Carbon::parse($value)->format('d-m-Y');
}
Здравствуйте, MySQL извлекает и отображает значения DATE в формате «ГГГГ-ММ-ДД», поэтому перед вставкой в БД отформатируйте их соответствующим образом.