Преобразование даты углерода в метку времени mysql.

у меня есть столбец переменной timestamp в базе данных 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)  

мой второй var-дамп такой.

столбец mysql, относящийся к" published_at", является переменной метки времени. Как я предположим, преобразовать это из углеродного объекта?

спасибо заранее.

3 ответов


вы также можете установить мутатор на вашей модели.

public function setPublishedAt($value)
{
    $this->attributes['published_at'] = strtotime($value);
}

преобразовать в метку

$model -> setPublishedAt('2015-08-26'); // 1440572400

или вы можете просто преобразовать дату в метку времени с помощью strtotime

strtotime-разбор любого английского текстового описания datetime в метку времени Unix

надеюсь, что это поможет.


короткий ответ:toDateTimeString() это то, что вы ищете:

$input['published_at'] = Carbon::now()->toDateTimeString();

посмотреть http://carbon.nesbot.com/docs/ дополнительные параметры, в том числе toDateString() Если вы хотите просто даты, а не времени.

но еще лучший способ справиться с этим-позволить Laravel обрабатывать литье значения даты в/из углеродного объекта для вас. См.https://laravel.com/docs/5.4/eloquent-mutators#date-mutators.


проблема в вашей строке даты, например, у вас есть это:

public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

теперь, если есть дата, как 10-12-2014, то эта ошибка произойдет, потому что час и минута отсутствует. Таким образом, вы убедитесь, что дата содержит все pars, а также убедитесь, что строка даты содержит - как разделитель не /.

другими словами, проверьте значение $перед использованием Carbon и убедитесь, что строка даты содержит точно такую же отформатированную строку, которую вы использовали в метод.

Это также происходит в методе доступа, поэтому сначала проверьте значение даты, прежде чем использовать его в Carbon::createFromFormat().

Если вы получаете дату из пользовательского ввода, проверьте дату перед ее использованием с помощью правила date или date_format: format, проверьте проверку здесь.

ответ ref:

Laravel / Carbon Timestamp 0000-00-00 00: 00: 00 или неожиданные данные найдены. Неожиданные данные. Данные отсутствуют