라라벨 created_at, updatead_at 시간을 json으로 뿌려줄때에 무조건 UTC시간으로 나오는거 해결하기

Updated on

오랜만에 포스팅… 부동산 문제때문에 정신이 없었다…

라라벨에서 timezone도 제대로 되어있고, 정상적으로 저장된 아이들을 불러와서 object 채로 출력하면 시간이 정상적으로 출력되지만 (laravel 내 timezone을 계산하여 출력되는듯한) 하지만, json으로 toArray() 형태로 뿌려줘버리면, 해당 시간값 (createad_at, updatead_at)은 UTC시간으로 출력된다.

https://laravel.com/docs/7.x/upgrade#date-serialization

라라벨 6에서는 문제 없었지만, 7에서는 문제가 발생한다…

class 모델명 extends Model
{
    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }
}

해결 방법은 위와 같다.
serializeDate를 추가해줌으로서, UTC 형태(?) JSON 형태(?)가 아닌, 그냥 mysql 저장된 값 원본 그대로 출력해준다.

끝.

추가적으로… timezone에는 Asia/Seoul 로 되어 있어서, model create 할 경우에는 정상적으로 +09:00 시간으로 들어가는데.. 이상한게.. model 을 가져와서 ->save(); 할 경우에는 updatead_at 부분에 +00:00 (UTC)로 저장되는 버그가 있다.

무슨 버그인지 모르겠따… 버그 맞긴한가 ? 흠.