Estou procurando uma função para converter a data em um fuso horário para outro.
Precisa de dois parâmetros,
- data (no formato "2012/04/10 10:10:30 +0000")
- sequência de fuso horário ("Ásia / Jacarta")
A cadeia de fuso horário está descrita em http://en.wikipedia.org/wiki/Zone.tab
Existe uma maneira fácil de fazer isso?
javascript
timezone
Rizky Ramadhan
fonte
fonte
Respostas:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
fonte
toLocaleString
, mas mostra incorretamente a passagem dessa sequência de volta para oDate
construtor. Isso está pedindo problemas. O analisador de cadeia de datas não é necessário para aceitar formatos específicos de código de idioma e a entrada seria tratada como se estivesse no fuso horário local. Não faça isso. Basta usar a saída de string da primeiratoLocalString
chamada.Para usuários moment.js , agora você pode usar o fuso horário . Ao usá-lo, sua função ficaria assim:
fonte
Date.prototype.toLocaleString
.Roubado descaradamente de: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
essa função é útil para calcular o valor do fuso horário, fornecendo o nome de uma cidade / país e o valor do deslocamento
fonte
A maioria dos navegadores de desktop (não móveis), exceto o Safari, suporta a função toLocaleString com argumentos; os navegadores mais antigos geralmente ignoram os argumentos.
fonte
toLocaleStringSupportsLocales()
implementação que permite verificar de forma confiável o suporte.Ok, encontrei!
Estou usando o fuso horário-js . este é o código:
fonte
Se você não deseja importar uma grande biblioteca, basta usar o Intl.DateTimeFormat para converter objetos Date em fusos horários diferentes.
Compensações, horário de verão e alterações no passado serão resolvidas por você.
fonte
toLocaleString
possui implementação inconsistente e isso funciona a partir do IE11 em diante.formatter
objeto, você obtém: `` O valor da opção 'Ásia / Jacarta' para 'timeZone' está fora do intervalo válido. Esperado: ['UTC'] `` `Entendi !
Queria forçar a data mostrada = data do servidor, não importa as configurações locais (UTC).
Meu servidor é GMT-6 -> new Date (). GetTimezoneOffset () = 360.
fonte
Você pode usar o método toLocaleString () para definir o fuso horário.
Na Índia, você pode usar "Indiano / Natal" e os seguintes fusos horários são:
fonte
toLocaleString
solução já foi dada há 4 anos .Se você precisar converter apenas fusos horários, carreguei uma versão simplificada do fuso horário, com apenas a funcionalidade mínima. Seus ~ 1 KB + dados:
fonte
Defina uma variável com ano, mês e dia separados por símbolos '-', mais um 'T' e a hora no padrão HH: mm: ss, seguidos por +01: 00 no final da string (no meu caso, o o fuso horário é +1). Em seguida, use essa sequência como argumento para o construtor de datas.
fonte
Devo observar que estou restrito em relação a quais bibliotecas externas eu posso usar. moment.js e timezone-js NÃO eram uma opção para mim.
O objeto js date que eu tenho está no UTC. Eu precisava obter a data E a hora dessa data em um fuso horário específico ('America / Chicago' no meu caso).
UTC está atualmente 6 horas à frente de 'America / Chicago'. A saída é:
fonte
new Date();
retornar fuso horário local, não UTCIf no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Aqui está o meu código, está funcionando perfeitamente, você pode tentar com a demonstração abaixo:
fonte
currentDateTimeCentralTimeZone.getHours()
? Sem que ele iria trabalhar e é o mesmo que das seeking27 resposta stackoverflow.com/a/40809160/1404185Você pode tentar isso também para converter o fuso horário da data em Índia:
fonte
Tendo olhado em volta, incluindo links desta página, encontrei este ótimo artigo, usando o fuso horário do momento:
https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/
Para resumir:
Obter o fuso horário do usuário
Retorna por exemplo: Fuso Horário: Europe / London
Definir o fuso horário do usuário padrão
Definir fuso horário personalizado
Converter data / hora no fuso horário local, assumindo que a data / hora original está no UTC
Regresso: Dom, 25 de dezembro de 2016, 07:00
Converter data / hora em LA Time
Volta: Sábado, 24 de dezembro de 2016, 23:00
Converter do horário de Los Angeles para Londres
Regresso: Dom, 25 de dezembro de 2016, 15:00
fonte
Você também pode usar https://www.npmjs.com/package/ctoc_timezone
Tem uma implementação muito simples e personalização de formato.
Alterando o formato no toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Resultado :
28th Feb 2013 19:00:00 EST
Você pode explorar várias funcionalidades no documento.
fonte
existe um módulo npm chamado 'timezones.json' que você pode usar para isso; consiste basicamente em um arquivo json com objetos que contêm informações sobre horário de verão e deslocamento, ....
para asia / jakarta, seria possível retornar este objeto:
Você pode encontrá-lo aqui:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
espero que seja útil
fonte
Pessoas familiarizadas com o
java.time
pacote java 8 oujoda-time
provavelmente adorarão o novo garoto do ramo: o js-joda biblioteca .Instalar
Exemplo
Na verdadeira natureza do java, é bastante detalhado lol. Mas, sendo uma biblioteca java portada, especialmente considerando que eles portaram casos de teste de 1800, provavelmente também funciona com precisão excelente.
A manipulação do cronógrafo é difícil. É por isso que muitas outras bibliotecas estão com problemas em casos extremos. O Moment.js parece acertar os fusos horários, mas as outras bibliotecas js que eu já vi, inclusive
timezone-js
, não parecem confiáveis.fonte
Recentemente fiz isso no Typescript:
Eu uso o formato "en-UK" porque é simples. Poderia ter sido "en-US" ou o que quer que funcione.
Se o primeiro argumento for o fuso horário local e a segunda for o fuso horário de destino, ele retornará um objeto Date com o deslocamento correto.
fonte
Eu estava tendo problemas para usar o fuso horário do momento . Estou adicionando esta resposta apenas se outra pessoa enfrentar o mesmo problema. Então, eu tenho uma string de data
2018-06-14 13:51:00
vindo do meuAPI
. Eu sei que isso é armazenado,UTC
mas a string não fala por si.Avisei o fuso horário do momento, de que fuso horário está essa data:
Agora eu gostaria de convertê-lo para um fuso horário específico, fazendo:
fonte
Basta definir o fuso horário do seu país desejado e você pode mostrar facilmente em html, a atualização usando a função SetInteval () após cada minuto. A função formatAMPM () gerencia o formato de 12 horas e a exibição da hora AM / PM.
fonte
Não conheço um método fácil de converter um objeto de data para qualquer fuso horário, mas se você quiser convertê-lo no fuso horário local, basta convertê-lo
Date.prototype.getTime()
no número correspondente de milissegundos e voltar novamente.Por exemplo,
date.getHours()
agora você retornará em15
vez de13
se você estiver, como eu, na Áustria (e é verão).Eu li que as várias funções de data e hora podem exibir um comportamento não padrão em alguns navegadores, então teste isso primeiro. Posso confirmar que funciona no Chrome.
fonte
Deslocamento do fuso horário para o seu fuso horário atual
Para o meu fuso horário GMT + 10 (Austrália), retornou -36000
fonte
trocador de horas manual rápido e sujo e retorno:
fonte