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)'
노드는 이미 환경 변수를 읽었으므로 나중에 시간대를 변경할 수 없습니다.
process.env.TZ = 'Europe/Amsterdam'
"좋은, 이제 설정할 수있는 모든 유효한 값의 목록을 어디에서 찾을 수 있습니까?" 매번 그것을 찾지 못했습니다.
zone.tab
해당 아카이브 의 파일을 확인하십시오 .
다음은 외부 모듈을 사용하지 않고 NodeJ에서 사용자 정의 시간대 날짜 시간을 가져 오는 100 % 작동 예제입니다.
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
불행히도 설정 process.env.TZ
이 제대로 작동하지 않습니다 기본적으로 변경이 적용되는시기는 미정입니다).
따라서 노드를 시작하기 전에 시스템 시간대를 설정하는 것이 유일한 옵션입니다.
그러나 그렇게 할 수 없으면 노드 시간 을 해결 방법으로 사용할 수 있습니다. 현지 시간 또는 UTC 시간으로 시간을 가져와 원하는 시간대로 변환하십시오. Nodejs에서 시간대 오프셋을 사용하는 방법을 참조하십시오 . 자세한 내용은.
이 솔루션 env TZ='Europe/Amsterdam' node server.js
당신은 같은 건물 도구를 사용하여 응용 프로그램을 시작할 때 특별히 갈래의 프로세스와 작업 할 때 @uhef에서이 앱이 갈래의 프로세스 작업을하지 않는 경우에 작동하지만, 꿀꺽 꿀꺽 , 명령이 gulp
ENV 값을 취할 것입니다 만, 꿀꺽 꿀꺽 만든 과정 아닌 (앱).
이 문제를 해결하려면 다음을 수행해야합니다.
$ export TZ="Europe/Amsterdam"; gulp myTask
이렇게하면 TZ
작업중인 콘솔에서 시작된 모든 프로세스에 대해 환경 변수 가 설정 되며 접두사로 export TZ="Europe/Amsterdam";
다시 실행할 필요없이 동일한 콘솔에서 gulp 명령 이후에 실행 된 모든 후속 프로세스가 포함 됩니다.
Etc/UTC
특정 오프셋도 Etc
있지만 오프셋은 예상 한 것과 반대입니다. Etc/GMT-1
UTC + 1 시간입니다. 참조https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
서버 시간대를 설정하고 NTP 동기화를 사용하십시오. 서버 시간을 변경하는 더 좋은 솔루션이 있습니다.
시간대를 나열하려면
timedatectl list-timezones
시간대를 설정하려면
sudo timedatectl set-timezone America/New_York
시간대 확인
timedatectl
서버 및 데이터베이스에 UTC 시간대를 사용하는 것을 선호합니다. 모든 변환은 클라이언트에서 처리해야합니다. 클라이언트 측에서 moment.js를 사용할 수 있습니다.
많은 인스턴스를 유지 관리하기도 쉬울 것입니다.
노드 13 부터는 반복적으로 설정할 수 process.env.TZ
있으며 새 Date 객체의 시간대에 반영됩니다. 프로덕션 코드에서 이것을 사용할지 모르겠지만 단위 테스트에 확실히 유용 할 것입니다.
> 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)'
set TZ='UTC' node index.js
당신은 순간 시간대 를 취할 수 있습니다 . 위치를 설정하고 일광 절약 시간제를 관리 할 수 있습니다.
Date
이나 다른 내장 모듈을 통해 원하는 동작을 수행 할 수 없다면 권장하지 않습니다 .
때로는 다른 곳에서 가상 서버에서 코드를 실행 중일 수 있습니다. NODEJS 또는 다른 특징을 실행할 때 흐릿해질 수 있습니다.
다음은 모든 시간대를 쉽게 사용할 수있는 수정 사항입니다.
시간대 문구를 FORMAT 줄의 괄호 안에 넣으십시오.
이 경우 EPOCH를 동부로 변환합니다.
//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');
node.js v13 업데이트
@Tom이 지적했듯이 이제 완전한 icu 지원이 v13에 내장되어 있습니다. 따라서 설정 단계를 생략 할 수 있습니다. https://nodejs.org/api/intl.html 런타임에서 icu를 빌드하거나 사용하는 방법을 여전히 사용자 정의 할 수 있습니다.
Windows의 node.js의 경우 다음을 수행 할 수 있습니다.
full-icu가 설치되어 있으면 날짜 로케일이 올바르게 적용됩니다.
npm i full-icu
또는 전 세계적으로 : npm i -g full-icu
코드에서 toLocaleString ()을 사용하십시오. 예 :
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
이것은 다음과 같은 것을 생성 할 것이다 : 25/02/2019, 3:19:22 pm
. 24 시간을 원하는 경우 'en-GB'는 다음을 생성합니다.25/02/2019, 15:19:22
WEBSITE_TIME_ZONE의 애플리케이션 설정 외에도 node.js를 Azure 웹앱으로 사용하려면 NODE_ICU_DATA를 다음과 같이 설정해야합니다.<your project>\node_modules\full-icu
npm i full-icu를 완료 한 후 . 해당 디렉터리는 임시 파일이므로 지울 수 있으므로 Azure에 패키지를 전역으로 설치하는 것은 권장되지 않습니다.
참고 : 1. NodeJS가 날짜 로케일을 올바르게 적용하지 않음
환경 변수 TZ
를 다음과 같이 설정하여 Node.js 프로세스 시간대를 적용 할 수 있습니다.UTC
따라서 모든 시간은 UTC + 00 : 00로 측정됩니다.
전체 목록 : https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
package.json 예제 :
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
index.js 또는 app.js 또는 main.js와 같은 기본 파일 또는 파일 이름이 무엇이든 환경 변수를 설정하십시오.
process.env.TZ = "Aisa/Tehran";
이것은 전체 노드 응용 프로그램에서 사용될 시간대를 설정합니다