将碳日期转换为 mysql 时间戳。

2022-08-30 16:31:03

我在mysql数据库中有一个时间戳变量列。尝试将碳时间戳转换为我可以在那里输入的内容,但只返回一个Carbon对象,当我尝试使用Carbon对象的时间戳字符串时,它不会在mysql中注册。Carbon::now()

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 转储就是这样。

与“published_at”相关的 mysql 列是一个时间戳变量。我想如何将其从碳物体转换过来?

提前致谢。


答案 1

简短的答案是,这就是你正在寻找的: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


答案 2

问题出在您的日期字符串中,例如,您有以下情况:

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

现在,如果有像10-12-2014这样的日期,那么会发生此错误,因为缺少小时和分钟。因此,请确保日期包含所有 par,并确保日期字符串包含 - 作为分隔符而不是 /。

换句话说,在使用 Carbon 之前,请检查$value,并确保日期字符串包含与在该方法中使用的格式字符串完全相同。

这也发生在访问器方法中,因此在Carbon::createFromFormat().

如果您从用户输入中获取日期,则在使用日期或date_format:格式规则使用它之前验证日期,请检查此处的验证。

答案参考:

Laravel/Carbon 时间戳 0000-00-00 00:00:00 或发现意外数据。发现意外数据。数据缺失


推荐