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

429
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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