Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

226
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!