Преобразование углеродной даты в метку времени MySQL.
У меня есть столбец переменной метки времени в базе данных MySQL. Попытка преобразовать углеродную метку времени во что-то, что я могу там ввести, но Carbon::now()
возвращает только объект Carbon, и когда я пытаюсь использовать строку метки времени объекта Carbon, он не регистрируется в mysql.
public function store(CreateArticleRequest $request){
$input = $request->all();
var_dump($input); // JUST SO YOU CAN SEE
$input['published_at'] = Carbon::now();
var_dump($input); // JUST SO YOU CAN SEE
Article::create($input);
}
Мой первый дамп var такой:
array (size=4)
'_token' => string 'Wy67a4hWxrnfiGz61wmXfYCSjAdldv26wOJiLWNc' (length=40)
'title' => string 'ASDFasdf' (length=8)
'body' => string 'asdfasdf' (length=8)
'published_at' => string '2015-08-26' (length=10)
Мой второй вар-дамп такой.
Столбец mysql, связанный с "ключом публикации", является переменной метки времени. Как я полагаю, чтобы преобразовать это из объекта углерода?
Заранее спасибо.
3 ответа
Вы также можете установить Mutator на вашей модели.
public function setPublishedAt($value)
{
$this->attributes['published_at'] = strtotime($value);
}
преобразовать в метку времени
$model -> setPublishedAt('2015-08-26'); // 1440572400
или вы можете просто конвертировать дату в метку времени, используя strtotime
strtotime - анализирует любое текстовое описание даты и времени на английском языке в метку времени Unix
Надеюсь, это поможет.
Краткий ответ: toDateTimeString()
это то, что вы ищете:
$input['published_at'] = Carbon::now()->toDateTimeString();
Смотрите http://carbon.nesbot.com/docs/ для получения дополнительных возможностей, в том числе toDateString()
если вы просто хотите часть даты, а не время.
Но еще лучший способ справиться с этим - позволить Laravel обрабатывать приведение значения даты к / от объекта Carbon для вас. См. https://laravel.com/docs/5.4/eloquent-mutators.
Проблема в вашей строке даты, например, у вас есть это:
public function setCrbDateAttribute($value)
{
$this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
Теперь, если есть такая дата, как 10-12-2014, то эта ошибка произойдет, потому что отсутствуют часы и минуты. Таким образом, вы убедитесь, что дата содержит все элементы, а также убедитесь, что строка даты содержит - как разделитель, а не /.
Другими словами, проверьте значение $ перед использованием Carbon и убедитесь, что ваша строка даты содержит точно такую же отформатированную строку, которую вы использовали в методе.
Это также происходит в методе доступа, поэтому сначала проверьте значение даты, прежде чем использовать его в Carbon::createFromFormat().
Если вы получаете дату из пользовательского ввода, проверьте ее, прежде чем использовать, используя правило формата date или date_format:, проверьте проверку здесь.
Ref ссылка:
Laravel / Carbon Timestamp 0000-00-00 00:00:00 или неожиданные данные найдены. Неожиданные данные найдены. Данные отсутствуют