Converting a carbon date to mysql timestamp.

52,255

Solution 1

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.

Solution 2

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.

Solution 3

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

Share:
52,255

Related videos on Youtube

Alexander Kleinhans
Author by

Alexander Kleinhans

The struggle is real I hate dynamic typing and everything that's similar to it, i.e.: K8 yaml files with no schema. Javascript libraries with mysterious callbacks and parameters. Magical annotations and those with Stringly typed, optional params. All of the above embody code that's shorter to write, but insurmountably harder to debug, reference, and often impossible to test without re-running or re-starting entire processes. This becomes unimaginably inconvenient when processes encompass the deployment of distributed infrastructure, immensely disparate technologies, idempotent state, networking rules, race-conditions, and expensive ass time on AWS and GCP. Please. Just. Stop.

Updated on July 09, 2022

Comments

  • Alexander Kleinhans
    Alexander Kleinhans almost 2 years

    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.

    • mdamia
      mdamia over 8 years
      use strtotime on the date.
  • AndrewMcLagan
    AndrewMcLagan almost 8 years
    thats not a MySQL timestamp, thats a UNIX timestamp
  • AndrewMcLagan
    AndrewMcLagan almost 5 years
    You really need to update the answer to this question