2017-12-31 61 views
0

angularJs 클라이언트 측 응용 프로그램에서 가져온 형식 시간이 2015-02-05T14:50:55+01:00 인 것으로 가정합니다.laravel이 ISO8601 형식의 날짜 시간을 인식하지 못함

이제 테이블에 MySQL을 DATETIME으로 저장하고 싶습니다.

나는 iso 8601 형식의 날짜 시간을 알고 있습니다. 이 때문에 내 모델 코드 아래에 추가 :

protected $dateFormat = 'DATE_ISO8601'; 

하지만이 새로운 필드 내 모델을 업데이트 할 때이 오류가있어 :

A textual day could not be found 
Meridian can only come after an hour has been found 
The format separator does not match 
The format separator does not match 
The format separator does not match 
The timezone could not be found in the database 
Data missing {"userId":1,"email":"[email protected]","exception":"[object] (InvalidArgumentException(code: 0): A textual day could not be found 
Meridian can only come after an hour has been found 
The format separator does not match 
The format separator does not match 
The format separator does not match 
The timezone could not be found in the database 
Data missing at D:\\wamp\\www\\zarsystem\\vendor\ 
esbot\\carbon\\src\\Carbon\\Carbon.php:582) 
[stacktrace] 
#0 D:\\wamp\\www\\zarsystem\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Concerns\\HasAttributes.php(715): Carbon\\Carbon::createFromFormat('DATE_ISO8601', '2015-02-05T14:5...') 

내가 DATE_ATOM 같은 다른 미리 정의 된 상수 시도를 , DATE_W3C, ...하지만 같은 erorrs 있어요.

혼란스러워서 어떻게해야합니까?

+0

귀하의 타임 스탬프가 유효한 MySQL의'datetime' ([여기 참조] (하지 https://dev.mysql.com/doc/refman/5.7/en/datetime를 사용하는 것이 좋습니다 .html)). –

답변

1

대신이 작업을 수행 할 수 있습니다

protected $dateFormat = 'c'; 

c는 ISO 8601 날짜입니다.

http://php.net/manual/en/function.date.php

또한, 나는 당신이 Y-m-d H:i:s 인 DB에서 표준 형식으로 날짜를 유지하려면 이전에 말한 이후로 당신이 원하는 게 아니에요 생각합니다.

그래서, 당신은 당신이 DB에 저장하기 전에 Y-m-d H:i:s로 다시 ISO 8601에서 변환하는 DB와 a mutator에서가 있어요 후에 날짜를 변환하는 an accessor을 추가해야합니다.

기본적으로 타임 스탬프는 'Y-m-d H : i : s'형식으로되어 있습니다. 타임 스탬프 형식을 사용자 정의해야하는 경우 모델에 $ dateFormat 특성을 설정하십시오. 이 속성은 날짜 속성이 모델은 배열이나 JSON

https://laravel.com/docs/5.5/eloquent-mutators#date-mutators

+0

'protected $ dateFormat = 'c';'이 오류가 발생했습니다 :'형식 구분 기호가 일치하지 않습니다 ....... D : \\ wamp \\ www \\ zarsystem \\ vendor \\ laravel \\ framework \\ src \\ \\ 데이터베이스 \\ Eloquent \\ 우려 \\ HasAttributes.php (715) : Carbon \\ Carbon :: createFromFormat ('c', '2015-02-05T14 : 5 ...') ' –

+0

@ A.B.Developer 그래서이 형식으로 저장 하시겠습니까? 프런트 엔드 개발자가 요청했기 때문에이 날짜가 필요하다고 말한 것입니다. 이런 경우에는 접근 자와 변형자를 만들고 싶습니다. 그래도이 작업을 수행하려면 [이 더러운 수정 프로그램] (https://github.com/laravel/framework/issues/14247)을 사용하십시오. –

+0

필자는'created_at','updated_at','birthday_date','wedding_date'와 같은 많은 날짜 필드를 가지고 있으며, 실제로 날짜 - 시간 MySQL 포맷으로 저장하는 동안 클라이언트 측에'ISO 8601'으로 날짜 시간을 보내는데 성공합니다. 이제 클라이언트가 'iso'로 날짜를 다시 보내면 MySQL 날짜 형식으로 변경하고 저장해야합니다. 각 필드에 대해 접근 자 (accessor)와 뮤 테이터 (mutator)를 작성하고 laravel이 자동으로 수행하기를 원하지 않습니다. –

0

DATE_ISO8601에 연재 될 때 자신의 형식뿐만 아니라, 데이터베이스에 저장된 DateTime 클래스에 정의 된 일정입니다 방법을 결정 당신은 'DATE_ISO8601'

의 형식 마스크 문자열을 사용하려는 당신은 할 수 있어야

protected $dateFormat = \DateTime::DATE_ISO8601; 

그러나이 형식은 ISO-8601과 호환되지 않지만 이전 버전과의 호환성을 위해이 방법으로 남겨 둡니다. 그래서 일정 ATOM

protected $dateFormat = \DateTime::ATOM; 
관련 문제