Como defino o fuso horário padrão no node.js?
Como defino o fuso horário padrão no node.js?
Respostas:
De acordo com este segmento de grupo do Google , você pode definir a variável de ambiente TZ antes de chamar qualquer função de data. Apenas testei e funciona.
> 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)'
Você não pode alterar o fuso horário mais tarde, pois o Node já leu a variável de ambiente.
process.env.TZ = 'Europe/Amsterdam'
"legal, agora, onde posso encontrar uma lista de todos os valores válidos que posso definir?" e eu não acho, todas as vezes.
zone.tab
arquivo nesse arquivo.
Outra abordagem que parecia funcionar para mim, pelo menos no ambiente Linux, é executar o aplicativo Node.js. desta forma:
env TZ='Europe/Amsterdam' node server.js
Isso deve pelo menos garantir que o fuso horário esteja definido corretamente desde o início.
Aqui está um exemplo de trabalho de 100% para obter o fuso horário personalizado Date Time nos NodeJs sem usar nenhum módulo externo:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Infelizmente, a configuração process.env.TZ
não funciona muito bem - basicamente, é indeterminado quando a alteração será efetiva).
Portanto, definir o fuso horário do sistema antes de iniciar o nó é sua única opção adequada.
No entanto, se você não puder fazer isso, deve ser possível usar o horário do nó como uma solução alternativa: obtenha seus horários no horário local ou UTC e converta-os no fuso horário desejado. Consulte Como usar o deslocamento de fuso horário no Nodejs? para detalhes.
A solução env TZ='Europe/Amsterdam' node server.js
do @uhef funciona nos casos em que seu aplicativo não funciona com o processo bifurcado, mas quando você está trabalhando com o processo bifurcado, especialmente quando você inicia o aplicativo com uma ferramenta de construção como gulp , o comando gulp
aceita os valores env, mas o processo criado pelo gulp not (seu aplicativo).
Para resolver isso, você precisa:
$ export TZ="Europe/Amsterdam"; gulp myTask
Isso definirá a TZ
variável de ambiente para todo o processo iniciado no console em que você está trabalhando, incluindo todos os processos subsequentes executados após o comando gulp no mesmo console, sem a necessidade de executá-los com o prefixo export TZ="Europe/Amsterdam";
novamente.
Etc/UTC
Existem também compensações específicas disponíveis Etc
, mas a compensação é inversa do que seria de esperar. Etc/GMT-1
é UTC + 1 hora. Vejahttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Defina o fuso horário do servidor e use a sincronização NTP. Aqui está uma solução melhor para alterar a hora do servidor.
Para listar fusos horários
timedatectl list-timezones
Para definir o fuso horário
sudo timedatectl set-timezone America/New_York
Verificar fuso horário
timedatectl
Prefiro usar o fuso horário UTC para meus servidores e bancos de dados. Quaisquer conversões devem ser tratadas no cliente. Podemos nos acostumar com moment.js no lado do cliente.
Também será fácil manter muitas instâncias,
Eu sei que esta discussão é muito antiga, mas acho que isso ajudaria qualquer um que chegou aqui do google como eu.
No GAE Flex (NodeJs), você pode definir a variável de ambiente TZ (aquela que gerencia todos os fusos horários de data no aplicativo) no arquivo app.yaml, deixo aqui um exemplo:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Aqui está uma resposta para aqueles que implantam um aplicativo Node.js. no Amazon AWS Elastic Beanstalk . Eu não vi isso documentado em nenhum outro lugar:
Abaixo Configuration -> Software -> Environment Properties
, basta definir o par de valores-chave TZ
e seu fuso horário America/Los Angeles
, por exemplo , e Aplicar a alteração.
Você pode verificar o efeito produzindo new Date().toString()
no aplicativo Node e prestando atenção no sufixo do fuso horário.
A partir do Nó 13 , agora você pode definir repetidamente process.env.TZ
e isso será refletido no fuso horário dos novos objetos Data. Não sei se usaria isso no código de produção, mas seria definitivamente útil em testes de unidade.
> 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
Você pode tomar o fuso horário do momento . Permite definir sua localização e também cuida do horário de verão.
Date
outros módulos internos.
Às vezes, você pode estar executando código em um servidor virtual em outro lugar - Isso pode ficar confuso ao executar o NODEJS ou outros tipos.
Aqui está uma correção que permitirá que você use qualquer fuso horário facilmente.
Verifique aqui a lista de fusos horários
Basta colocar sua frase de fuso horário entre colchetes da sua linha FORMAT.
Neste caso - estou convertendo EPOCH para 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');
eu trabalho com este pacote npm unix-system-timezone
Atualização para node.js v13
Como o @Tom apontou, o suporte completo ao icu está embutido na v13 agora. Portanto, as etapas de configuração podem ser omitidas. Você ainda pode personalizar como deseja criar ou usar o icu em tempo de execução: https://nodejs.org/api/intl.html
Para node.js no Windows , você pode fazer o seguinte:
Instale o full-icu, se tiver sido instalado, que aplica localidades de data corretamente
npm i full-icu
ou globalmente: npm i -g full-icu
Use toLocaleString () no seu código, por exemplo:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Isto irá produzir algo como: 25/02/2019, 3:19:22 pm
. Se você preferir 24 horas, 'en-GB' produzirá:25/02/2019, 15:19:22
Para o node.js como aplicativo Web do Azure , além das configurações do aplicativo WEBSITE_TIME_ZONE, você também precisa definir NODE_ICU_DATA como <your project>\node_modules\full-icu
, por exemplo , é claro, depois de fazer o npm i full-icu. A instalação do pacote globalmente no Azure não é sugerida, pois esse diretório é temporário e pode ser apagado.
Ref: 1. NodeJS não aplicando localidades de data corretamente
Você pode configurar o fuso horário global com a biblioteca tzdata:
npm install tzdata -y
Depois de definir seu ambiente com a variável, por exemplo: TZ = America / Bogota
E testando em seu projeto:
new Date()
Espero te ajudar
Você pode aplicar o fuso horário do processo Node.js. configurando a variável de ambiente TZ
comoUTC
Então, todo o tempo será medido no UTC + 00: 00
Lista completa: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Exemplo package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
basta definir a variável de ambiente em seu arquivo principal, como index.js ou app.js ou main.js ou qualquer que seja o seu nome de arquivo:
process.env.TZ = "Aisa/Tehran";
isso definirá o fuso horário que será usado em todo o aplicativo do nó