将一个碳14日期转换为MySQL时间戳。

28

我在mysql数据库中有一个时间戳变量列。我试图将carbon时间戳转换为可以输入其中的内容,但是Carbon::now()只返回一个Carbon对象,当我尝试使用Carbon对象的时间戳字符串时,它不会在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);   
}

我的第一个变量转储如下:

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 dump。

与 "published_at" 相关的 mysql 列是一个时间戳变量。我该如何从 Carbon 对象进行转换?

先行致谢。


在日期上使用 strtotime - mdamia
3个回答

72

12
问题出在您的日期字符串上,例如,您有这个字符串:
public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

如果有一个日期,例如10-12-2014,那么将会出现错误,因为小时和分钟是缺失的。所以你要确保日期包含所有部分,并且日期字符串使用 - 作为分隔符而不是 /。

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

这也会发生在访问器方法中,所以在使用Carbon::createFromFormat()之前先检查日期值。

如果你从用户输入中获取日期,则使用date或date_format:format规则在使用之前验证日期,可以在此处检查验证。

答案参考:

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


-30

你也可以在你的模型上设置变异器。

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

转换为时间戳

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

或者您可以使用strtotime将日期转换为时间戳。

strtotime - 将几乎任何英文文本日期描述解析为 Unix 时间戳

希望这可以帮到您。


3
那不是MySQL时间戳,那是UNIX时间戳。 - AndrewMcLagan
2
你真的需要更新这个问题的答案。 - AndrewMcLagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接