본문 바로가기
프론트엔드/JavaScript

JS와 Firebase의 시간 처리

by Pendine 2025. 3. 28.
728x90

조금이라도 의문이 들면 메모해서 남겨놓고 나중에 다시 찾아보면서 보완해나가는중 

 

 

오류 : 

파이어베이스 받아온 튜플의 시간 데이터 표출 오류.
파이어베이스에서 시간 데이터를 사용할때 Timestamp라는 클래스를 사용이 필요했고
호출된 데이터를 컴포넌트에 그릴때, 호출된 데이터의 시간데이터를 그대로 표출하니 오류가 발생했음.

 

습득한 지식 : 
Timestamp라는 클래스는 시간 정보를 표현해줄때 객체 필드값으로 {seconds, nanoseconds}로 다루고 있게 구성 되어있음.

firebase/firestore를 사용하면 
JS의 기본 시간 클래스인 Date와 갖다 꼴아박을수있도록
Timestamp.fromData( new Date ) 이런 메서드를 지원함

Timestamp.toDate() 를 사용하면 JS의 Date객체를 반환하는데
 Timestamp 에서 Date로 변환되는 과정에서 정밀도가 떨어질 수 있음.

마침 시간 이야기가 나와서 궁금해서 찾아봤는데
firebase의 Timestamp 객체는 UTC를 사용하는데
JS의 Date 는 UTC 를 사용 안하나?
분명히 예전에 JS의 Date때문에 고생했던 것 같은데
찾아보니 UTC 를 사용하지 않는건 아니다.
 JS에서 Date를 소개할떄 윤초이야기가 나왔으니 Timestamp에서는 윤초를 관리하는지 찾아보자


 

   Timestamp`은 시간대 또는 캘린더와 무관한 특정 시점을 나타내며, UTC 에포크 시간으로 나노초 단위의 초와 초 단위로 표현됩니다.그레고리력을 1년 역방향으로 확장하는 그레고리력을 사용하여 인코딩됩니다. 인코딩 시 모든 분의 길이가 60초라고 가정합니다. 즉, 윤초는 '스미어(smear)' 처리되므로 해석을 위한 별도의 윤초 테이블이 필요하지 않습니다. 범위는 0001-01-01T00:00:00Z~9999-12-31T23:59:59.999999999Z입니다.예시 및 추가 사양은 [타임스탬프 정의](https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto)를 참조하세요.
| 내용 출처 https://firebase.google.com/docs/reference/js/firestore_lite?hl=ko |

 

스미어 처리하여 윤초를 고르게 분산해서 처리한다는것을 알았다.

댓글