Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

721
Visualizações
calcular horas entre dos fechas y horas en javascript

Estoy tratando de calcular el total de horas y minutos diferentes en dos fechas y horas diferentes:

a continuación está mi código:

 let startShiftTime = moment(StartTime, ['DD-MM-YYYY h:mm:ss A']) .utcOffset(0, false) .format('DD-MM-YYYY hh:mm:ss A'); let endShiftTime = moment(EndTime, ['DD-MM-YYYY h:mm:ss A']) .utcOffset(0, false) .format('DD-MM-YYYY hh:mm:ss A'); var TotalSeconds = moment(startShiftTime, 'DD-MM-YYYY hh:mm:ss A') .utcOffset(0, false) .diff( moment(endShiftTime, 'DD-MM-YYYY hh:mm:ss A').utcOffset(0, false), 'seconds', ); var hours = Math.floor(TotalSeconds / 3600); var minutes = Math.floor((TotalSeconds / 60) % 60); console.log( 'startShiftTime: ', startShiftTime, ' endShiftTime: ', endShiftTime, ' hours: ', hours, ' minutes: ', minutes, );

Obtengo horas y minutos en todos los casos, excepto que la diferencia de tiempo es de 1 hora o de lo contrario

salida de la consola:

 startShiftTime: 02-12-2021 09:00:00 AM endShiftTime: 01-12-2021 09:30:00 PM hours: 11 minutes: 30 startShiftTime: 02-12-2021 04:30:00 PM endShiftTime: 02-12-2021 05:00:00 PM hours: -1 minutes: -30

vea en la segunda salida ... la diferencia de tiempo es de solo 30 minutos ... pero en horas obtengo 1

No soy capaz de entender dónde estoy cometiendo un error.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No necesita hacer esos cálculos usted mismo, pero puede usar la API moment.duration :

 const startShiftTime = moment('01-12-2021 09:00:00 AM', 'DD-MM-YYYY hh:mm:ss A'); const endShiftTime = moment('01-12-2021 09:30:00 AM', 'DD-MM-YYYY hh:mm:ss A'); const duration = moment.duration(startShiftTime.diff(endShiftTime)); console.log('as hours: ' + duration.asHours(), 'as minutes: ' + duration.asMinutes()); console.log('hours: ' + duration.hours(), 'minutes: ' + duration.minutes());
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

PD: obtienes valores negativos porque la diferencia se realiza en la hora de inicio, que es menor que la hora de finalización. Si desea valores positivos, simplemente invierta la diferencia: endShiftTime.diff(startShiftTime)

about 4 years ago · Juan Pablo Isaza Relatório

0

¿Por qué startShiftTime y endShiftTime son cadenas formateadas en lugar de instancias de moment . Terminas analizándolos de nuevo más tarde.

Estás calculando la diferencia entre tiempos al revés como debería ser.

 endShiftTime .diff(startShiftTime,'seconds')

Esto lleva a la pregunta obvia, ¿por qué el primer ejemplo se calcula correctamente? Debido a que la hora de finalización del turno es anterior a la hora de inicio, esto no tiene ningún sentido.

Intercambiar las horas de inicio y finalización en su primer ejemplo da como resultado la respuesta correcta en ambos casos.

 function calculate(StartTime, EndTime) { let startShiftTime = moment(StartTime, ['DD-MM-YYYY h:mm:ss A']) .utcOffset(0, false); let endShiftTime = moment(EndTime, ['DD-MM-YYYY h:mm:ss A']) .utcOffset(0, false); var TotalSeconds = endShiftTime .diff(startShiftTime,'seconds'); var hours = Math.floor(TotalSeconds / 3600); var minutes = Math.floor((TotalSeconds / 60) % 60); console.log(`startShiftTime: ${startShiftTime.format('DD-MM-YYYY h:mm:ss A')} endShiftTime: ${endShiftTime.format('DD-MM-YYYY h:mm:ss A')} hours: ${hours} minutes: ${minutes}`); } calculate('01-12-2021 09:30:00 PM', '02-12-2021 09:00:00 AM'); calculate('02-12-2021 04:30:00 PM', '02-12-2021 05:00:00 PM');
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda