JS Timezone, Firebase Cloud Functions 및 Luxon에 대한 메모


  • Cloud Functions: Cloud Functions에서 정의한 지역에 관계없이 기본 시간대는 UTC입니다.
  • Firebase Console에 기기 지역 설정에 따라 날짜/시간이 표시됩니다.
  • 기본 Luxon .setZone(keepLocalTime: false)이 기본 타임스탬프를 변경하지 않습니다.

  • process.env.TZ = 'UTC';
    const startDay = {
            seconds: 1660738904,
        };
    const d1 = DateTime.fromSeconds(startDay.seconds);
    const d2 = DateTime.fromSeconds(startDay.seconds)
            .startOf('day');
    const d3 = DateTime.fromSeconds(startDay.seconds)
            .setZone('UTC')
            .startOf('day');
    const d4 = DateTime.fromSeconds(startDay.seconds)
            .setZone('Asia/Bangkok')
            .startOf('day');
    
    console.log(d1.toString()); // 2022-08-17T12:21:44.000+00:00
    console.log(d2.toString()); // 2022-08-17T00:00:00.000+00:00
    console.log(d3.toString()); // 2022-08-17T00:00:00.000Z
    console.log(d4.toString()); // 2022-08-17T00:00:00.000+07:00
    


    위의 예에서 기본 setZone을 사용하여 동일한 타임스탬프에서 다른 시간대를 설정하고 결과를 모니터링했습니다. 첫 번째 줄에서 Cloud Functions에 구성된 것과 일치하도록 콘솔 시간대를 UTC로 설정했습니다.
    d4 setZone을 방콕으로 설정하고 시간을 시작일로 설정하면 시간이 00:00:00 GMT+7(17:00:00 GMT+0)로 설정됩니다.

    setZone 이후의 계산은 우리가 설정한 시간대를 따릅니다.
  • startOf('day')는 방콕 시간대
  • 를 기준으로 하루의 시작이 됩니다.
  • .toString()은 방콕 시간대
  • 를 기준으로 시간을 인쇄합니다.
    d3와 유사하게 setZone 이후의 계산은 시간대를 UTC로 간주합니다.

    그러나 setZone('Asia/Bangkok', { keepLocalTime: true})를 사용하면 . 기본 타임 스탬프가 변경됩니다.

    process.env.TZ = 'UTC';
    const startDay = {
        seconds: 1660738904,
    };
        console.log(DateTime.fromSeconds(startDay.seconds).toSeconds());
    // 1660738904
    
    
    console.log(
        DateTime.fromSeconds(startDay.seconds)
            .setZone('Asia/Bangkok')
            .toSeconds()
    );
    // 1660738904
    
    
    console.log(
        DateTime.fromSeconds(startDay.seconds)
            .setZone('Asia/Bangkok', { keepLocalTime: true })
            .toSeconds()
    );
    // 1660713704
    


    위의 예에서 첫 번째와 두 번째는 동일한 타임스탬프를 제공합니다. 그러나 세 번째의 경우 시간대가 다른 동일한 시간을 반영하도록 타임스탬프를 변경합니다.

    process.env.TZ = 'UTC';
    const startDay = {
        seconds: 1660738904,
    };
        console.log(DateTime.fromSeconds(startDay.seconds).toString());
    // 2022-08-17T12:21:44.000+00:00
    
    console.log(
        DateTime.fromSeconds(startDay.seconds)
            .setZone('Asia/Bangkok')
            .toString()
    );
    // 2022-08-17T19:21:44.000+07:00
    
    console.log(
        DateTime.fromSeconds(startDay.seconds)
            .setZone('Asia/Bangkok', { keepLocalTime: true })
            .toString()
    );
    // 2022-08-17T12:21:44.000+07:00 --> try to keep the time 12:21:44 with timezone to GMT+7
    

    좋은 웹페이지 즐겨찾기