Преобразование углеродной даты в метку времени 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 или неожиданные данные найдены. Неожиданные данные найдены. Данные отсутствуют

Другие вопросы по тегам