2016-01-11 124 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()是假設美國的日期格式和感到困惑