Преобразование углеродной даты в отметку времени 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)  

Мой второй дамп var выглядит так.

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

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


person Alexander Kleinhans    schedule 26.08.2015    source источник
comment
используйте strtotime на дате.   -  person mdamia    schedule 26.08.2015


Ответы (3)


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

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

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

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

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

strtotime — Преобразует любое текстовое описание даты и времени на английском языке в временную метку Unix.

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

person mdamia    schedule 26.08.2015
comment
это не временная метка MySQL, это временная метка UNIX - person AndrewMcLagan; 27.06.2016
comment
Вам действительно нужно обновить ответ на этот вопрос - person AndrewMcLagan; 29.07.2019

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

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

См. http://carbon.nesbot.com/docs/ для получения дополнительной информации, включая toDateString(), если вы просто хотите часть даты, а не время.

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

person orrd    schedule 25.03.2017

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

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

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

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

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

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

Ответ исх:

Временная метка Laravel/Carbon 0000-00- 00 00:00:00 или Обнаружены неожиданные данные. Обнаружены неожиданные данные. Данные отсутствуют

person Vision Coderz    schedule 26.08.2015