29

I have a timestamp variable column in a mysql database. Trying to convert a carbon timestamp to something that I can input there, but Carbon::now() only returns a Carbon object and when I try to use the timestamp string of the Carbon object, it does not register in 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);   
}

My first var dump is like so:

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)  

My second var dump is like so.

The mysql column relating to "published_at" is a timestamp variable. How an I suppose to convert this from a Carbon Object?

Thanks in advance.

1
  • use strtotime on the date.
    – mdamia
    Commented Aug 26, 2015 at 7:41

3 Answers 3

75

The short answer is that toDateTimeString() is what you're looking for:

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

See http://carbon.nesbot.com/docs/ for more options, including toDateString() if you just want the date part and not the time.

But an even better way to handle it would be to let Laravel handle casting the date value to/from a Carbon object for you. See https://laravel.com/docs/5.4/eloquent-mutators#date-mutators.

0
12

The problem is in your date string, for example, you have this:

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

Now, if there is a date like 10-12-2014 then this error will occur because the hour and minute is missing. So you make sure that the date contains all the pars and also make sure that the date string contains - as a separator not /.

In other words, check the $value before you use Carbon and make sure your date string contains exactly the same formatted string you've used in the method.

This also happens in an accessor method, so check the date value first before you use it in Carbon::createFromFormat().

If you are getting the date from user input then validate the date before using it using date or date_format:format rule, check the validation here.

Answer ref:

Laravel/Carbon Timestamp 0000-00-00 00:00:00 or Unexpected data found. Unexpected data found. Data missing

-30

You can also set Mutator on your model.

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

to convert to timestamp

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

or you can just convert the date to timestamp using strtotime

strtotime — Parse about any English textual datetime description into a Unix timestamp

Hope this help.

2
  • 3
    thats not a MySQL timestamp, thats a UNIX timestamp Commented Jun 27, 2016 at 4:54
  • 2
    You really need to update the answer to this question Commented Jul 29, 2019 at 4:25

Not the answer you're looking for? Browse other questions tagged or ask your own question.