Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
Generación de duración a partir de valores de tiempo

Estoy tratando de encontrar una manera a través de moment.js para convertir dos valores de tiempo, que vienen como tiempos de inicio y finalización, expresados en horas y minutos como valores de cadena, así: inicio: 1:12 y parada: 2:10 , o por la tarde, start: 14:23 , y stop: 15:22 y genera una duración en milisegundos a partir de esto. He intentado lo siguiente, pero me da un resultado NaN :

Solo para aclarar, recibo los datos en formato de cadena. Vea a continuación cómo se ve:

 const startValue = "1:12"; const stopValue = "2:10"; // for a duration of 58 minutes const msDuration = moment(stopValue).format('HH:mm').valueOf() - moment(startValue).format('HH:mm').valueOf();

Supongo que el problema aquí es que mi startValue y stopValue deben convertirse primero a un formato diferente, ya que actualmente son valores de cadena. Entonces, ¿cómo puedo convertir un valor de cadena de "1:12" para que sea algo que pueda usar el moment ?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Hay dos problemas con su código:

  1. Análisis no válido

    Sus entradas de tiempo no están en un formato estándar que Moment reconozca, por lo que tendrá que usar un análisis formateado para explicarle sus tiempos.

  2. format ting como una cadena antes de llamar a valueOf .

    .format() convierte su objeto Moment en una cadena, y las cadenas no se pueden restar. Para resolver esto, simplemente puede soltar la llamada .format() . En su lugar, también puede usar .diff() , que calculará la diferencia por usted.

Entonces, puedes usar cualquiera de estos:

 const msDuration = moment(stopValue, "H:mm").valueOf() - moment(startValue, "H:mm").valueOf()
 const msDuration = moment(stopValue, "H:mm") - moment(startValue, "H:mm") // Subtracting will implicitly call .valueOf()
 const msDuration = moment(stopValue, "H:mm").diff(moment(startValue, "H:mm"))
about 4 years ago · Juan Pablo Isaza Denunciar

0

Según sus comentarios anteriores, reconozco que está recibiendo los tiempos como respuesta en el siguiente formato: "HH: mm".

Si la fecha real realmente no importa, puede convertirla así ( JsFiddle ):

 const startValue = "1:12"; const stopValue = "2:10"; // for a duration of 58 minutes const start = { hour: startValue.split(":")[0], minute: startValue.split(":")[0] } const stop = { hour: stopValue .split(":")[0], minute: stopValue .split(":")[0] } const msDuration = moment().hours(stop.hour).minutes(stop.minute).valueOf() - moment().hours(start.hour).minutes(start.minute).valueOf(); //you might get 1 ms less. so jest set also ms to 0 const msDurationA = moment().hours(stop.hour).minutes(stop.minute).milliseconds(0).valueOf() - moment().hours(start.hour).minutes(start.minute).milliseconds(0).valueOf();

Entonces, básicamente, está tomando la fecha actual y mutando las horas y los minutos, para que pueda trabajar con moment.Js.

Aunque mi pregunta es, ¿por qué necesitas un momento necesario? también puedes hacerlo en JS nativo:

 const startValue = "1:12"; const stopValue = "2:10"; // for a duration of 58 minutes const start = { hour: +startValue.split(":")[0], minute: +startValue.split(":")[1] }; const stop = { hour: +stopValue.split(":")[0], minute: +stopValue.split(":")[1] }; const msDuration = (stop.hour * 3600000 + stop.minute * 60000) - (start.hour * 3600000 + start.minute * 60000); console.log("msDuartion: ", msDuration);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Usando vainilla JS:

 function getMilliSecs(text) { const spl = text.split(":"); return parseInt(spl[0])*60*60*1000 + parseInt(spl[1])*60*1000; } function getMilliSecsDuration(start, stop) { return getMilliSecs(stop) - getMilliSecs(start); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda