可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
When I try to modify the format of the default created_at field of my Resource model, I get the following error:
{ "error":{ "type":"InvalidArgumentException", "message":"Unexpected data found. Unexpected data found. The separation symbol could not be found Unexpected data found. A two digit second could not be found", "file":"\/var\/www\/html\...vendor\/nesbot\/carbon\/src\/Carbon\/Carbon.php", "line":359 } }
Here is the code that produced the above error:
$tile = Resource::with('comments, ratings')->where('resources.id', '=', 1)->first(); $created_at = $tile->created_at; $tile->created_at = $created_at->copy()->tz(Auth::user()->timezone)->format('F j, Y @ g:i A');
If I remove ->format('F j, Y @ g:i A')
from the above code, it works fine, but it's not in the format I want. What could the problem be? I have almost identical code elsewhere in my app and it works without error.
UPDATE: Using setToStringFormat('F j, Y @ g:i A')
does not cause an error, but returns null
.
回答1:
Adding the following code to my model worked for me:
public function getCreatedAtAttribute($date) { if(Auth::check()) return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->copy()->tz(Auth::user()->timezone)->format('F j, Y @ g:i A'); else return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->copy()->tz('America/Toronto')->format('F j, Y @ g:i A'); } public function getUpdatedAtAttribute($date) { return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('F j, Y @ g:i A'); }
This allows me to use created_at
and updated_at
in the format I want.
回答2:
I did experience the same problem, and in my search for an answer I stumled across How do you explain the result for a new \DateTime('0000-00-00 00:00:00')? .
I decided to change the datetime-columns in the database to nullable with default value = NULL, to prevent fields from having value '0000-00-00 00:00:00'.
My migration in laravel 5 looks like this:
Schema::table('table', function($table) { $table->dateTime('created_at')->nullable()->default(null)->change(); $table->dateTime('updated_at')->nullable()->default(null)->change(); });
回答3:
It's not a carbon issue, it's a conflict between a setAttribute
or getAttribute
in your model.
回答4:
You shouldn't try to change the format of created_at
. It has to be a Carbon object. If you want to display the created_at
date in a different format, then just format it at the time you output it. Or you may want to create a method that changes the format so you can call it whenever you want it in a different format. For example, add a method like this to your Resource class:
public function createdAtInMyFormat() { return $this->created_at->format('F j, Y @ g:i A'); }
You can also have that function adjust the timezone, etc. Then you can use $tile->createdAtInMyFormat()
for example to get your special format created_at
from your $tile
object.