在Mysql DB中插入日期值

时间:2016-01-11 20:43:42

标签: php mysql datetime laravel-5.1 php-carbon

我正在尝试在这样的MySQL表中插入日期值(使用Laravel 5.1):

public function update(Request $request, $id)
{
  $user = User::findOrFail($id);      
  $data = $request->all();         
  $data['birthdate'] = date("Y-d-m", strtotime($data['birthdate']));
  ...
  $user->fill($data)->save();

如果我插入当天的日期< 12,如果日期>它将被插入1970-01-01。 12!

我在User模型中使用了Eloquent mutators,如下所示:

public function getBirthdateAttribute() {
    return date('d/m/Y', strtotime($this->attributes['birthdate']));        
}

public function setBirthdateAttribute($value) {              
    $this->attributes['birthdate'] = Carbon::createFromFormat('Y-m-d', $value);
}

请问我的代码是什么问题!?

2 个答案:

答案 0 :(得分:2)

改变这个:

date("Y-d-m", strtotime($data['birthdate']));

为:

date("Y-m-d", strtotime($data['birthdate']));

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html

你的格式应该是dd-mm-yyyy,如果是这样dd/mm/yyyy

$date = '22/05/2012';
$date = str_replace('/', '-', $date);
$date = date('Y-m-d', strtotime($date));

答案 1 :(得分:2)

这是您需要阅读和理解的strtotime() manual部分

  

注意:

     

通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。但是,如果年份以两位数格式给出,而分隔符是破折号( - ,日期字符串被解析为y-m-d。

     

为避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()。

因为你正在使用/作为分隔符strtotime()假设美国日期格式并使日期和月份部分混淆