Usando Moment.js, não consigo transformar um objeto de momento correto em um objeto de data com fusos horários. Não consigo a data correta.
Exemplo:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
javascript
momentjs
vadim.zhiltsov
fonte
fonte
Wednesday 24th 2019, 12:47:48 am
isso é possível converter2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. É por isso que existem bibliotecas como moment.tz, para complementar a capacidade de bare bones do objeto Date incorporado, que apenas entende o UTC e o fuso horário do host, é isso.Respostas:
Use isso para transformar um objeto de momento em um objeto de data:
Em http://momentjs.com/docs/#/displaying/as-javascript-date/
Rendimentos:
fonte
toDate
é realmente como obter umDate
objeto de amoment
. Mas o código no corpo da pergunta pergunta sobre a conversão de fuso horário - o queDate
não pode ser feito. A menos que o horário da montanha seja realmente o fuso horário do usuário, não tenho certeza de como isso respondeu à pergunta.moment("12/12/2011")
é onde você receberia essa mensagem. Não tem nada a ver com ir de um momento para o outro, objmoment().toDate()
Desde que você tenha inicializado o fuso horário com os dados para as zonas desejadas , seu código funcionará conforme o esperado.
Você está convertendo corretamente o momento no fuso horário, o que é refletido na segunda linha de saída de
momentObj.format()
.Mudar para UTC não apenas reduz o deslocamento, mas volta para o fuso horário UTC. Se você fizer isso, não precisará da
.tz()
chamada original . Você poderia apenas fazermoment.utc()
.Talvez você esteja apenas tentando alterar a string do formato de saída? Nesse caso, basta especificar os parâmetros que você deseja para o
format
método:Com relação às últimas linhas do seu código - quando você volta a
Date
usar um objetotoDate()
, está desistindo do comportamento de moment.js e voltando ao comportamento do JavaScript. UmDate
objeto JavaScript sempre será impresso no fuso horário local do computador em que está sendo executado. Não há nada que moment.js possa fazer sobre isso.Algumas outras pequenas coisas:
Embora o momento em que o construtor possa aceitar um
Date
, geralmente é melhor não usá-lo. Para "agora", não usemoment(new Date())
. Em vez disso, basta usarmoment()
. Ambos irão funcionar, mas é desnecessariamente redundante. Se você estiver analisando a partir de uma sequência, passe-a diretamente para o momento. Não tente analisá-loDate
primeiro. Você encontrará o analisador de momento muito mais confiável.Os fusos horários como
MST7MDT
existem por motivos de compatibilidade com versões anteriores. Eles se originam de fusos horários no estilo POSIX e apenas alguns deles estão nos dados TZDB. A menos que seja absolutamente necessário, você deve usar uma chave comoAmerica/Denver
.fonte
.toDate()
. 2) Não use comentários para fazer novas perguntas. É para isso que serve o grande botão "Fazer pergunta" ..toDate
realmente não funcionou para mim, então, aqui está o que eu fiz:espero que isto ajude
fonte
moment().add(1, 'd').toDate()
.Como momentjs não tem controle sobre o objeto de data do javascript, encontrei uma solução alternativa para isso.
Isso fornecerá um objeto de data javascript com o horário convertido
fonte
Eu precisava ter informações de fuso horário na minha sequência de datas. Eu estava usando originalmente,
moment.tz(dateStr, 'America/New_York').toString();
mas então comecei a receber erros sobre a alimentação dessa string de volta ao momento.Eu tentei o,
moment.tz(dateStr, 'America/New_York').toDate();
mas depois perdi as informações de fuso horário que eu precisava.A única solução que retornou uma sequência de datas utilizável com fuso horário que poderia ser recuperada no momento foi
moment.tz(dateStr, 'America/New_York').format();
fonte
Legal e Limpo!!!!
fonte
Para converter qualquer data, por exemplo, utc:
fonte
moment().utc()
retorna valores para UTC e, em seguida,.format( "YYYY-MM-DD HH:mm:ss" )
retorna uma sequência que foi definida como UTC sem um deslocamento de fuso horário e, portanto, é analisada como local. Ele não corresponde a um formato de momento padrão e, portanto, é analisado pelo analisador incorporado. Também não corresponde a nenhum formato suportado pelo ECMAScript, portanto, a análise depende da implementação. De qualquer forma, ele é analisado como local para que o deslocamento do fuso horário seja aplicado novamente ao criar o valor da hora da Data.A questão é um pouco obscura. Eu farei o meu melhor para explicar isso. Primeiro você deve entender como usar o fuso horário do momento . De acordo com esta resposta aqui, TypeError: moment (). Tz não é uma função , você precisa importar o momento do fuso horário do momento em vez do momento padrão (é claro que você precisará instalar o fuso horário do momento!). Por uma questão de clareza,
Agora, para usar o recurso de fuso horário, use moment.tz ("date_string / moment ()", "time_zone") (visite https://momentjs.com/timezone/ para obter mais detalhes). Esta função retornará um objeto de momento com um fuso horário específico. Por uma questão de clareza,
Agora, quando você tenta converter newYork (o objeto momento) com toDate () do momento ( conversão de formato ISO 8601), você obtém o horário de Greenwich, Reino Unido. Para mais detalhes, consulte este artigo https://www.nhc.noaa.gov/aboututc.shtml , sobre o UTC. No entanto, se você quiser apenas a hora local neste formato (hora de Nova York, de acordo com este exemplo), adicione o método .utc (true) , com o argumento true , ao objeto moment. Por uma questão de clareza,
Em resumo, o moment.tz considera o fuso horário especificado e compara o horário local com o horário de Greenwich para fornecer um resultado. Espero que isso tenha sido útil.
fonte
moment atualizou o js lib a partir de 06/2018.
se você tiver liberdade para usar o Angular5 +, use melhor o recurso datePipe lá do que a função de fuso horário aqui. Eu tenho que usar o moment.js porque meu projeto se limita apenas ao Angular2.
fonte
tente (sem
format
passo)Mostrar snippet de código
fonte
new Date(moment())
é equivalente anew Date()
. O fuso horário está definido apenas para d .