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

428
Views
Convierta la duración de ISO8601 a segundos en mecanografiado usando date-fns

Tengo una cadena de duración ISO8601. ex. "PT1M14S" Quiero convertir esto a segundos (Int) usando el paquete date-fns en mecanografiado

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Analizar una duración ISO es la mitad del problema, aplicar los valores a una fecha es la otra mitad. El siguiente es un analizador simple que devuelve un objeto en la forma {part: value} como:

 {year: 1, month, 3, hour: 1, minute: 2}

Solo devuelve propiedades para tokens que están en la cadena. Es necesario agregar alguna validación decente de la cadena.

 function parseISODuration(s) { // QnD validation of string, need something smarter // Should check tokens, order and values // eg decimals only in smallest unit, W excludes other date parts if (!/^P/.test(s)) return; // Split into parts let parts = s.match(/\d+(\.\d+)?[az]|T/gi); // Flag for date and time parts, used to disambiguate month and minute let inDate = true; // Map of part tokens to words let partMap = {Y:'year',M:'month',W:'week',D:'day',h:'hour',m:'minute',s:'second'} return parts.reduce((acc, part) => { // Set flag if reached a time part if (part == 'T') { inDate = false; return acc; } // Disambiguate time parts (month/minute) if (!inDate) { part = part.toLowerCase(); } // Add part name and value as a number acc[partMap[part.slice(-1)]] = +part.slice(0,-1); return acc; }, {}); } // Examples ['P1Y2M1.5D', 'P1Y3M26DT3M', 'PT3H2M4.5S', 'P6W'].forEach(duration => console.log(`${duration} => ${JSON.stringify(parseISODuration(duration))}`) );

Convertir una duración a milisegundos no es trivial y debe hacerse en el contexto de una fecha de inicio. Un enfoque es copiar la fecha de inicio, agregar los valores apropiados (una biblioteca ciertamente puede ayudar con eso), luego obtener la diferencia entre las fechas de inicio y finalización.

De esa manera, la instancia y la biblioteca de Date tienen en cuenta problemas como la duración de los meses y los días (donde se observa el horario de verano), pero hay muchas preguntas con buenas respuestas aquí sobre cómo agregar años, meses, días, etc. una fecha por lo que no es difícil escribir sus propias funciones para hacer eso.

about 4 years ago · Juan Pablo Isaza Report

0

El paquete proporciona una solución: iso8601-duration Así que podríamos hacer algo como

 import { parse, toSeconds } from 'iso8601-duration'; toSeconds(parse("PT1M14S"))

Por favor, hágamelo saber date-fns proporciona alguna solución para esto

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!