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

1N5*_*818 14 php mysql timestamp laravel php-carbon

我在mysql数据库中有一个timestamp变量列.试图将碳时间戳转换为我可以在那里输入的内容,但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);   
}
Run Code Online (Sandbox Code Playgroud)

我的第一个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)  
Run Code Online (Sandbox Code Playgroud)

我的第二个var转储是这样的.

与"published_at"相关的mysql列是时间戳变量.我想如何从碳对象转换它?

提前致谢.

orr*_*rrd 30

简短的回答是toDateTimeString()你正在寻找的:

$input['published_at'] = Carbon::now()->toDateTimeString();
Run Code Online (Sandbox Code Playgroud)

有关更多选项,请参阅http://carbon.nesbot.com/docs/,包括toDateString()您是否只想要日期部分而不是时间.

但是处理它的更好方法是让Laravel为您处理向/从Carbon对象转换日期值.请参阅https://laravel.com/docs/5.4/eloquent-mutators#date-mutators.


iCo*_*ers 5

问题出在你的日期字符串中,例如,你有这个:

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

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

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

这也发生在访问器方法中,因此在使用它之前首先检查日期值 Carbon::createFromFormat().

如果您从用户输入获取日期,然后使用date或date_format:format规则验证日期,请在此处检查验证.

答案参考:

Laravel/Carbon Timestamp 0000-00-00 00:00:00或发现意外数据.发现意外数据.数据丢失


mda*_*mia -30

您还可以在模型上设置 Mutator。

\n\n
public function setPublishedAt($value)\n{\n    $this->attributes['published_at'] = strtotime($value);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

转换为时间戳

\n\n
$model -> setPublishedAt('2015-08-26'); // 1440572400\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n

strtotime \xe2\x80\x94 将任何英文文本日期时间描述解析为 Unix 时间戳

\n
\n\n

希望这有帮助。

\n

  • 那不是 MySQL 时间戳,那是 UNIX 时间戳 (3认同)
  • 你确实需要更新这个问题的答案 (2认同)