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.tabarquivo 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.TZnã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.jsdo @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 gulpaceita 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 TZvariá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 TZe 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.TZe 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.
Dateoutros 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 TZcomoUTC
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ó