2015-08-26 36 views
6

Tôi có cột biến thời gian trong cơ sở dữ liệu mysql. Đang cố gắng chuyển đổi dấu thời gian carbon thành thứ mà tôi có thể nhập ở đó, nhưng Carbon::now() chỉ trả về đối tượng Carbon và khi tôi cố gắng sử dụng chuỗi dấu thời gian của đối tượng Carbon, nó không đăng ký trong mysql.Chuyển đổi ngày carbon thành dấu thời gian 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); 
} 

đầu tiên var bãi của tôi là như vậy:

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 bãi thứ hai của tôi là như vậy.

Cột mysql liên quan đến "published_at" là một biến thời gian. Làm thế nào tôi cho rằng để chuyển đổi này từ một đối tượng Carbon?

Xin cảm ơn trước.

+0

sử dụng 'strtotime' vào ngày. – mdamia

Trả lời

-4

Bạn cũng có thể thiết lập mutator trên mô hình của bạn.

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

để chuyển đổi để đánh dấu thời gian

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

, hoặc bạn chỉ có thể chuyển đổi ngày đánh dấu thời gian sử dụng strtotime

strtotime - Phân tích về bất kỳ tiếng Anh mô tả datetime văn bản thành một dấu thời gian Unix

Hy vọng trợ giúp này.

+0

không phải là dấu thời gian của MySQL, đó là dấu thời gian UNIX – AndrewMcLagan

3

Vấn đề là trong chuỗi ngày của bạn, ví dụ, bạn có điều này:

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

Bây giờ, nếu có một ngày như 2014/10/12 thì lỗi này sẽ xảy ra vì giờ và phút là còn thiếu. Vì vậy, bạn hãy chắc chắn rằng ngày chứa tất cả các phân tích cú pháp và cũng đảm bảo rằng chuỗi ngày chứa - như một dấu phân cách không /.

Nói cách khác, hãy kiểm tra giá trị $ trước khi bạn sử dụng Carbon và đảm bảo chuỗi ngày của bạn chứa chính xác cùng một chuỗi được định dạng mà bạn đã sử dụng trong phương pháp.

này cũng xảy ra trong một phương pháp accessor, vì vậy kiểm tra các giá trị ngày tháng đầu tiên trước khi bạn sử dụng nó trong Carbon::createFromFormat().

Nếu bạn đang nhận được ngày từ người dùng nhập vào sau đó xác nhận ngày trước khi sử dụng nó bằng cách sử ngày hoặc date_format: định dạng quy tắc, kiểm tra xác thực ở đây.

trả lời ref:

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

3

Câu trả lời ngắn gọn là toDateTimeString() là những gì bạn đang tìm kiếm:

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

Xem http://carbon.nesbot.com/docs/ cho các tùy chọn hơn, bao gồm toDateString() nếu bạn chỉ muốn một phần ngày và không thời gian.

Nhưng cách tốt hơn để xử lý nó là để Laravel xử lý việc truyền giá trị ngày đến/từ đối tượng Carbon cho bạn. Xem https://laravel.com/docs/5.4/eloquent-mutators#date-mutators.

Các vấn đề liên quan