2016-01-11 123 views
1

我想在一个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工作正常,如果日> 12,则会插入1970-01-01!

我用雄辩的存取器在用户模式是这样的:

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

然后日期和月份部分它的日期格式问题 – RiggsFolly

+0

请提供'$ data ['birthdate']'的样本数据。 – VolkerK

+0

输入的数据如何?使用'-'或'/'seperat ors – RiggsFolly

回答

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)); 
+0

同样的问题.. :/ 如果我插入例如1990年1月3日我会得到1990年3月1日 如果13/01/1990将1970-01-01 ... :( – BKF

+0

'13/01/1990' - 这将是1990年的第13个月的第一天。参见http://docs.php.net/manual/en/datetime.formats.date.php – VolkerK

+0

非常感谢你!它的工作原理!! :)) ))))) $ date = '22/05/2012'; $ date = str_replace('/',' - ',$ date); $ date = date('Y-m-d',strtotime($ date)); – BKF

2

这是一块strtotime() manual的需要阅读和理解

注:

日期在M/d/y或DMY格式通过查看在各个组件之间的隔板消除歧义:如果分隔符是斜线(/),则假定美国m/d/y;而如果分隔符是破折号( - )或点(。),则假定欧洲的d-m-y格式。但是,如果年份以两位数格式给出,并且分隔符是破折号( - ,则日期字符串被解析为ymd)。为了避免可能的不确定性,最好使用ISO 8601(YYYY-MM- DD)日期或日期时间:: createFromFormat()时可能。

,是因为你使用的是/作为分隔符的strtotime()是假设美国的日期格式和感到困惑