我正在尝试在这样的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);
}
请问我的代码是什么问题!?
答案 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()假设美国日期格式并使日期和月份部分混淆