Existe alguma maneira de usar o método moment.js format
em objetos de duração? Não consigo encontrá-lo em nenhum lugar nos documentos e não parece ser um atributo nos objetos de duração.
Eu gostaria de poder fazer algo como:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
Além disso, se houver outras bibliotecas que possam acomodar facilmente esse tipo de funcionalidade, eu estaria interessado em recomendações.
Obrigado!
javascript
momentjs
mvanveen
fonte
fonte
HH:mm:ss
vou dar00:00:23
no meu exemplo anterior. então apenas o invólucro errado na parte HorasRespostas:
Estamos pensando em adicionar algum tipo de formatação às durações no momento.js. Consulte https://github.com/timrwood/moment/issues/463
Algumas outras bibliotecas que podem ajudar são http://countdownjs.org/ e https://github.com/icambron/twix.js
fonte
Dê uma olhada no JSFiddle
fonte
DDD HH:mm:ss.SSS
(ondeDDD
é o dia do ano) é exibido1
quando eu quero0
. Alguma solução rápida para isso?converta a duração para ms e depois para o momento:
fonte
.format('HH:mm:ss')
. Veja os docsUse este plug-in Moment Duration Format .
Exemplo:
fonte
hh:mm:mm
e só tiver 10 segundos, será exibido em10
vez de00:00:10
(mesmo com o forcelength ativado) Se não estiver formatando ... então deve ser chamado de outra coisa, os formatos devem ser padronizado.{ trim: false }
ele interromperá esse comportamento.const duration = moment.duration(value, 'seconds');
eu pudesse ser formatado usando:moment.utc(duration.as('milliseconds')).format('HH:mm:ss').toString();
Use esta linha de código:
fonte
fonte
O melhor cenário para meu caso de uso específico foi:
Isso melhora a resposta de @ Wilson, pois não acessa a propriedade interna privada _data.
fonte
Você não precisa do formato. Use durações como esta:
Encontrei esta solução aqui: https://github.com/moment/moment/issues/463
EDITAR:
E com preenchimento por segundos, minutos e horas:
fonte
duration = moment.duration(7200, 'seconds'); withPadding(duration);
dirão "00:00".if (duration.asDays() > 0) { return 'at least one day';
- estou lendo isso corretamente?Eu uso:
E eu recebo "09:30" em var str.
fonte
_data
é uma propriedade interna e pode mudar sem aviso prévio.moment(moment.duration(1200000)._data).format('hh:mm:ss')
retornará 12:20 em vez de 00:20 #h
está no intervalo de 1 a 12, portanto é bastante esperado. UtilizarH
em vez docs - fichas horasmoment.utc(...).format("HH:mm");
se diff é um momento
fonte
Se você deseja usar uma biblioteca javascript diferente, o numeral.js pode formatar segundos da seguinte maneira (o exemplo é por 1000 segundos):
fonte
Eu uso a função de formato clássico nesses casos:
Isso é um hack, porque a diferença de horário é tratada como uma data de momento padrão, uma data de época inicial, mas isso não importa para o nosso objetivo e você não precisa de nenhum plugin
fonte
Se todas as horas tiverem que ser exibidas (mais de 24) e se '0' antes das horas não for necessário, a formatação poderá ser feita com uma pequena linha de código:
fonte
Com base na resposta de ni-ko-o-kin :
fonte
Para formatar a duração do momento para string
fonte
se você usa angular, adicione isso aos seus filtros:
exemplo de uso
fonte
Minha solução que não envolve nenhuma outra biblioteca e funciona com diff> 24h
fonte
E o javascript nativo?
fonte
Use o formato momento-duração .
Estrutura do Cliente (ex: React)
Servidor (node.js)
fonte
Impressões:
fonte
fonte
Você pode usar o numeral.js para formatar sua duração:
fonte
Isso pode ser usado para obter os dois primeiros caracteres como horas e os dois últimos como minutos. A mesma lógica pode ser aplicada a segundos.
fonte
moment.duration(x).format()
foi descontinuado. Você pode usarmoment.utc(4366589).format("HH:mm:ss")
para obter a resposta desejada.fonte
Como usar corretamente as durações de moment.js? | Use moment.duration () no código
Primeiro você precisa importar
moment
emoment-duration-format
.Então, use a função duration. Vamos aplicar o exemplo acima: 28800 = 8 da manhã.
,Bem, você não possui um erro de tipo acima. GetVocê obtém o valor certo às 8:00 da manhã? Não…, o valor que você recebe é 8:00 a. O formato Moment.js não está funcionando como deveria.
SolutionA solução é transformar segundos em milissegundos e usar o horário UTC.
Tudo bem, temos 8:00 agora. Se você quer 8 da manhã em vez das 8 da manhã por tempo integral, precisamos fazer o RegExp
fonte
Eu precisava fazer isso para trabalhar como requisito para exibir as horas neste formato. No começo eu tentei isso.
No entanto, qualquer coisa acima de 24 horas e as horas são redefinidas para 0. Mas os minutos e segundos foram precisos. Então eu usei apenas essa parte pelos minutos e segundos.
Agora tudo que eu preciso é o total de horas.
E para obter o formato que todos queremos, basta colá-lo.
se
totalMilliseconds
for894600000
isso retornará249:30:00
.Espero que tenha ajudado. Deixe qualquer dúvida nos comentários. ;)
fonte
Se você usa Angular> 2, criei um Pipe inspirado na resposta @ hai-alaluf.
fonte
Isso funciona para mim:
fonte