Estou usando o Moment.js para analisar e formatar datas no meu aplicativo da web. Como parte de um objeto JSON, meu servidor back-end envia datas como um número de milissegundos da época UTC (deslocamento do Unix).
A análise de datas em um fuso horário específico é fácil - basta anexar o identificador de fuso horário RFC 822 ao final da sequência antes de analisar:
// response varies according to your timezone
const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")
// problem solved, always "03/11 17:00"
const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")
console.log({ m1, m2 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Mas como formato uma data em um fuso horário específico ?
Desejo resultados consistentes, independentemente do horário atual do navegador, mas não quero exibir datas no UTC.
javascript
timezone
momentjs
quietmint
fonte
fonte
DD MMM, YYYY
não funciona, quando eu usomoment.tz("2018-02-15T14:20:00.000+0530", "Asia/Bangkok").format("DD MMM, YYYY")
. Alguém pode me apontar na documentação onde posso encontrar todas as chaves para formatar o tempo ao usar esta API."15 Feb, 2018"
. Você queria usar a string de formatoDD MMMM, YYYY
para obter"15 February, 2018"
?Respostas:
Como apontado na resposta de Manto ,
.utcOffset()
é o método preferido a partir do Momento 2.9.0. Esta função usa o deslocamento real do UTC, não o deslocamento reverso (por exemplo, -240 para Nova York durante o horário de verão). Seqüências de caracteres deslocadas como "+0400" funcionam da mesma maneira que antes:O mais antigo
.zone()
como setter foi descontinuado no Moment.js 2.9.0. Ele aceitou uma sequência contendo um identificador de fuso horário (por exemplo, "-0400" ou "-04: 00" por -4 horas) ou um número que representa minutos atrás do UTC (por exemplo, 240 para Nova York durante o horário de verão).Para trabalhar com fusos horários nomeados em vez de deslocamentos numéricos, inclua fuso horário do momento e use
.tz()
:fonte
.zone()
como um getter, que retorna minutos do UTC (por exemplo, retorna 300 para Nova York durante o horário padrão)..tz("America/Phoenix")
se incluir momentjs.com/timezone . Atualizei a resposta com um exemplo.Usar fuso horário
Antes de poder acessar um fuso horário específico, você precisará carregá-lo dessa forma (ou usar métodos alternativos descritos aqui )
fonte
Algumas respostas já mencionam que o fuso horário é o caminho a seguir com o fuso horário nomeado. Eu só quero esclarecer algo sobre essa biblioteca que foi bastante confuso para mim. Há uma diferença entre essas duas instruções:
Supondo que um fuso horário não esteja especificado na data passada em:
O primeiro código incorpora a data e assume que o fuso horário é o informado. O segundo codifica a data, assume o fuso horário do navegador e altera a hora e o fuso horário de acordo com o fuso horário informado.
Exemplo:
Meu fuso horário é +5 de utc. Portanto, no primeiro caso, ele não muda e define a data e a hora para o utc fuso horário.
No segundo caso, ele assume que a data passada está em -5, depois a transforma em UTC, e é por isso que indica a data "2018-07-18T00: 00: 00Z"
NOTA: O parâmetro format é realmente importante. Se o momento omitido puder retornar à classe Date, o que pode comportamentos imprevisíveis
Supondo que o fuso horário esteja especificado na data passada em:
Nesse caso, ambos se comportam igualmente
Embora agora eu entenda por que funciona dessa maneira, achei que esse era um recurso bastante confuso e que vale a pena explicar.
fonte
.zone () foi descontinuado e você deve usar utcOffset:
fonte
Eu estava tendo o mesmo problema com o Moment.js. Instalei o fuso horário, mas o problema não foi resolvido. Então, fiz exatamente o que aqui está exposto, defini o fuso horário e funciona como um encanto:
Muito obrigado!
fonte
new Date()
construtor. O momento fornece tudo o que você precisa para analisar datas. Consulte Analisando documentos.new Date()
internamente), mas isso é inconsistente nos navegadores . Em vez disso, você deve usar o formato esperado como o segundo argumento. Exemplo:moment("12-25-1995", "MM-DD-YYYY")
.Acabei de chegar a esse ponto e, como eu tinha o mesmo problema, publicaria os resultados que obtive
ao analisar, você pode atualizar o deslocamento (ou seja, estou analisando os dados (1.1.2014) e quero apenas a data, 1º de janeiro de 2014. No GMT + 1, recebo 31.12.2013. Portanto, compenso o valor primeiro.
Bem, veio a calhar para eu apoiar nos fusos horários
B
fonte
Você pode tentar isso,
Aqui você pode obter a data com base no fuso horário do cliente (navegador).
O regex basicamente fornece o valor do deslocamento.
Felicidades!!
fonte