programing

node.js에서 기본 표준 시간대를 설정하려면 어떻게 해야 합니까?

elecom 2023. 5. 13. 08:48
반응형

node.js에서 기본 표준 시간대를 설정하려면 어떻게 해야 합니까?

node.js에서 기본 표준 시간대를 설정하려면 어떻게 해야 합니까?

Google 그룹 스레드에 따라 날짜 함수를 호출하기 전에 TZ 환경 변수를 설정할 수 있습니다.방금 테스트해봤는데 효과가 있어요.

> process.env.TZ = 'Europe/Amsterdam' 
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'

하지만 나중에 시간대를 변경할 수는 없습니다. 노드가 환경 변수를 이미 읽었기 때문입니다.

적어도 Linux 환경에서는 효과가 있을 것 같았던 또 다른 접근 방식은 다음과 같이 Node.js 응용 프로그램을 실행하는 것입니다.

env TZ='Europe/Amsterdam' node server.js

이렇게 하면 적어도 처음부터 표준 시간대가 올바르게 설정되어 있는지 확인해야 합니다.

다음은 외부 모듈을 사용하지 않고 NodeJs에서 사용자 지정 표준 시간대 Date Time을 가져오는 100% 작업 예제입니다.

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Calcutta'
});

console.log(nDate);

안타깝게도 설정은 제대로 작동하지 않습니다. 기본적으로 변경사항이 언제 적용될지는 불확실합니다.)

따라서 노드를 시작하기 전에 시스템의 시간대를 설정하는 것이 유일한 적절한 옵션입니다.

그러나 그렇게 할 수 없는 경우에는 노드 시간을 해결 방법으로 사용할 수 있습니다. 로컬 또는 UTC 시간으로 시간을 지정하고 원하는 시간대로 변환하십시오.Nodejs에서 표준 시간대 오프셋을 사용하는 방법을 참조하십시오.상세한 것은

index.js 또는 app.js 또는 main.js와 같은 기본 파일에 환경 변수를 설정하거나 파일 이름이 무엇이든 지정할 수 있습니다.

process.env.TZ = "Asia/Tehran";

전체 노드 응용 프로그램에서 사용할 시간대를 설정합니다.

결책env TZ='Europe/Amsterdam' node server.jsfrom @uhef는 당신의 앱이 분기된 프로세스로 작동하지 않는 경우에 작동하지만, 당신이 분기된 프로세스로 작업할 때, 특히 당신이 gulp와 같은 빌드 도구로 당신의 앱을 시작할 때, 명령.gulpenv 값을 사용하지만, 꿀꺽 삼키면서 생성된 프로세스는 (사용자의 앱)을 사용하지 않습니다.

이 문제를 해결하려면 다음 작업을 수행해야 합니다.

$ export TZ="Europe/Amsterdam"; gulp myTask

이것은 설정할 것입니다.TZ 프로세스를 합니다.export TZ="Europe/Amsterdam";한 번

Node 13부터 이제 반복적으로 설정할 수 있습니다.process.env.TZ새 날짜 개체의 표준 시간대에 반영됩니다.제가 이것을 생산 코드에 사용할지는 모르겠지만 유닛 테스트에서 분명히 유용할 것입니다.

> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'

> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'

서버 표준 시간대를 설정하고 NTP 동기화를 사용합니다.여기 서버 시간을 변경할 수 있는 한 가지 더 나은 솔루션이 있습니다.

표준시를 나열하는 방법

timedatectl list-timezones

표준 시간대를 설정하려면

sudo timedatectl set-timezone America/New_York

표준 시간대 확인

timedatectl

서버와 데이터베이스에 UTC 표준 시간대를 사용하는 것을 선호합니다.모든 변환은 클라이언트에서 처리해야 합니다.우리는 클라이언트 측에서 moment.js를 활용할 수 있습니다.

많은 사례를 유지하는 것도 쉬울 것입니다.

저는 이 스레드가 매우 오래되었다는 것을 알고 있지만, 저처럼 구글에서 여기에 도착한 사람은 누구나 도움이 될 것이라고 생각합니다.

GAE Flex(NodeJs)에서는 app.yaml 파일에서 환경 변수 TZ(앱의 모든 날짜 시간대를 관리하는 변수)를 설정할 수 있습니다. 예를 들어 다음과 같습니다.

app.svl

# [START env]
env_variables:
  # Timezone
  TZ: America/Argentina/Buenos_Aires

다음은 Amazon AWS Elastic Beanstalk에 Node.js 애플리케이션을 배포하는 사용자를 위한 답변입니다.이 문서는 다른 곳에서 본 적이 없습니다.

Configuration -> Software -> Environment Properties 값 합니다.TZ그리고 당신의 시간대, 예를 들어. America/Los Angeles변경 사항을 적용합니다.

하려면 출을통효확수있다습니인할과를력을 해야 합니다.new Date().toString()Node 앱에서 시간대 접미사에 주의를 기울입니다.

Node "Node.js"를 할 수 .TZUTC

그래서 모든 시간은 UTC+00:00으로 측정됩니다.

전체 목록: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

예제 패키지.json:

{
  "scripts": {
    "start": "TZ='UTC' node index.js"
  }
}

node.js v13에 대한 업데이트

@Tom이 지적했듯이, 현재 v13에는 완전한 icu 지원이 구축되어 있습니다.따라서 설정 단계를 생략할 수 있습니다.런타임에서 icu를 구축하거나 사용할 방법을 사용자 지정할 수 있습니다. https://nodejs.org/api/intl.html

윈도우즈의 node.js에 대해 다음을 수행할 수 있습니다.

  1. 설치된 경우 전체 icu를 설치하여 날짜 로케일을 올바르게 적용

    npm i full-icu또는 전체적으로:npm i -g full-icu

  2. 코드에서 toLocaleString()을 사용합니다. 예:

    new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })

    이렇게 하면 다음과 같은 결과를 얻을 수 있습니다.25/02/2019, 3:19:22 pm24시간을 원하는 경우 'en-GB'를 사용하면 다음과 같은 이점은 다음과 같습니다.25/02/2019, 15:19:22

Node.js as Azure 웹 앱의 경우 WEBITE_TIME_ZONE의 애플리케이션 설정 외에도 NODE_ICU_DATA를 예를 들어 설정해야 합니다. <your project>\node_modules\full-icu물론 당신이 npmi full-icu를 한 후에.해당 디렉터리는 임시 디렉터리이므로 Azure에 전체적으로 패키지를 설치하는 것은 권장되지 않습니다.

참조: 1. NodeJS가 날짜 로케일을 제대로 적용하지 않음

  1. intl 옵션을 사용하여 node.js를 빌드할 수도 있습니다. 자세한 내용은 여기를 참조하십시오.

모멘트 시간대를 사용할 수 있습니다.위치를 설정하고 일광 절약 시간을 관리할 수 있습니다.

때때로 다른 곳에서 가상 서버에서 코드를 실행하고 있을 수 있습니다. NODEJS 또는 다른 버전을 실행할 때 코드가 혼탁해질 수 있습니다.

여기 당신이 어떤 시간대든 쉽게 사용할 수 있게 해주는 수정 사항이 있습니다.

표준 시간대 목록은 여기에서 확인하십시오.

표준 시간대 구문을 형식 줄의 괄호 안에 넣기만 하면 됩니다.

이 경우 - EPOH를 Eastern으로 변환합니다.

//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');

let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');

나는 이 npm 패키지 unix-system-timezone으로 작업합니다.

라이브러리 tzdata를 사용하여 글로벌 표준 시간대를 구성할 수 있습니다.

npm install tzdata -y

다음과 같은 변수를 사용하여 환경을 설정한 후:TZ=아메리카/보고타

프로젝트 테스트:

new Date()

도움이 되길 바랍니다.

앱을 시작할 때 설정하기만 하면 됩니다.

{
  "scripts": {
    "start:timezone": "TZ='utc' node index.js",
    "start": "TC=$tz node index.js"
  }
}

CI 또는 앱을 시작하려는 곳에서 다음과 같이 정적으로 실행할 수 있습니다.npm run start:timezone또는 프로세스에 시간대를 동적으로 전달합니다.npm run start utc

또 다른 접근 방식은 앱의 시작 지점에 다음과 같이 설정하는 것입니다.

process.env.TZ = "UTC";

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Seoul'
});

console.log(nDate);

이것은 작동합니다; https://stackoverflow.com/a/53282481/17700714

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

언급URL : https://stackoverflow.com/questions/8083410/how-can-i-set-the-default-timezone-in-node-js

반응형