moment.js의 format함수 사용시 ios,firefox에서는 invalid date가 반환
- 크롬에서는 잘 됐으니 moment와 ios, firefox가 뭔가 안맞다!?
- 두 인자로 들어오는게 달랐으니 객체와 문자열이 인자로 들어올때의 moment의 차이다?
- 문자열로 들어와도 moment는 작동하기 때문에, 형식의 차이다.
크롬에서는 잘됐기 때문에.. moment를 사용하는 환경, 즉 ios, firefox에서 뭔가 문제가 있는거라고 생각하고 코드를 확인해봤다.
전체적인 공지사항 리스트를 보여주는 view, 공지사항을 클릭했을 때 그 공지사항의 디테일을 보여주는 view가 각각 달랐는데, 어찌된건지 moment가 디테일 view에서는 작동을 했다.
확인을 해보니 같은 moment이지만 인자로 들어오는 것이 달랐다. 하나는 '2019.03.10' 형식의 문자열이 들어가고, 제대로 작동하는 view는 iso 형식으로 db에 저장된 date객체가 들어갔다.
그렇다면 date 객체의 문제인가 싶어서 인자로 db에 저장되어 있는 createdAt 필드를 date 함수의 인자로 넣어서 객체를 moment의 인수로 넣어보니 또 invalid date가 나왔다. 물론 안드로이드는 잘 됐다.
테스트를 더 진행해보니 ios, firefox 쪽의 date 함수에 넣는 인자의 형식이 문제였다.
ios, firefox에서 Date객체를 만들 때 Date 생성자의 인자로 '2019.05.23'의 형식은 적합하지 않은 형식이라고 인식하게 되는 것을 확인했다.
여기서 고민은 컬럼을 거쳐 오는 data이기 때문에 '..~' 형식의 문자열로 받을 수 밖에 없는데 몇가지 단계를 거쳐서 중간의 .
을 -
로 바꿔서 moment js를 사용하는 방식을 전체적으로 따라 가느냐. 아니면 그대로 받아서 뒤에 시간 부분만 없애서 넣어주느냐 였다.
결국 후자로 갔는데, 이유는
ios에서 사용하는 moment는 '..~'형식을 사용하려면 그 시간을 객체로 만들어서 사용해야하는데 ios, firefox 환경의 date 함수는 위의 형식을 인자로 받으면 invalid를 내뱉는다.
그리고 애초에 uiLibrary에 wrapping을 해서 moment를 사용하여 createAt을 사용하는 부분이 있었기 때문에 굳이 또 moment를 사용해서 보여줄 이유가 전혀 없었다.
참조: