В моем приложении пользователь может указать дату в форме через средство выбора даты. При этом дата имеет следующий формат: «2018-05-16T12: 45: 30Z».
Затем я хочу сохранить его в базе данных MySql в столбце TIMESTAMP.
Позже пользователь может редактировать свои данные. Следовательно, средство выбора даты должно быть инициализировано датой, исходящей с сервера, предварительно сохраненной.
Для этого я создал аксессор и мутатор:
public function setDateNameInputAttribute($value)
{
$this->attributes['date_name_input'] = Carbon::createFromFormat('Y-m-d\TH:i:s\Z', $value);
}
public function getDateNameInputAttribute($value)
{
return Carbon::parse($value)->format('Y-m-d\TH:i:s\Z');
}
Этот код работает нормально: мой интерфейс считывает даты UTC (Zulu), и я могу вставить метки времени в свою базу данных.
Однако, это не идеально.
Допустим, по какой-то причине мне нужно добавить один час к сохраненной дате
$myObject = MyClass::find(1);
$theDate = $myObject->dateNameInput;
Теперь $ theDate является строкой "T Z format" из-за метода доступа. Я мог бы воссоздать объект Carbon, чтобы выполнить добавление, но я думаю, что этот переход Carbon -> string -> Carbon будет безобразным. Как я могу сделать хорошую операцию?
- Если в моих приложениях много входных дат с разными названиями моделей, есть ли способ обобщить мой метод доступа и мутатор?
Собственно, мой первый подход хорош?
Спасибо за чтение!