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

139
Vistas
Calcule el número de días de una cadena como '1y2m3d', '2m3d', '1y3d', '1y' o simplemente '3d'

Quiero crear un sistema de filtrado para mi grilla en javascript. Mi problema es que tengo una cadena que contiene un número de años, meses y días. Me gustaría transformar esta cadena al formato de número de días. Es decir 1y1m2d = 1*365+1*30+2 , 1y2d = 1*365+2 u otra combinación como esta.

No estoy exactamente seguro de cómo manejar esto. Intenté crear una expresión regular para eso, sin embargo, no sé cómo distinguir si el grupo es por año o meses, etc.

Regex se ve así: /(\d+y)?(\d+m)?(\d+d)?/ sin embargo, con esta solución, el problema es que no puedo saber si el grupo es por años, meses etc.

La segunda solución que probé fue usar .replace y luego pasarlo a través math.eval() pero esto resultó no funcionar para mí, no estoy seguro de por qué.

 let result = stringFormat.replace(/y|m|d/, function (x) { return x === 'y' ? '*365' : x === 'm' ? '*12' : '*30'; });

¿Qué piensas sobre esto? ¿Cuál sería el mejor enfoque aquí?

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

0

Puedes usar

 const stringFormat = '1y1m2d'; let result = stringFormat.replace(/[ymd]/g, function (x, index, source) { return (x === 'y' ? '*365' : x === 'm' ? '*30' : '')+(index !== source.length-1 ? '+' : ''); }); console.log(result) // => 1*365+1*30+2

Notas:

  • /[ymd]/g coincide con todas las apariciones de y o m o d en la cadena
  • Hay tres argumentos utilizados en la función de devolución de llamada: x representa el valor de coincidencia, el index es la posición de inicio de coincidencia y la source es el valor de cadena de entrada
  • Si coincide y , el reemplazo es *360 y + si la coincidencia no está al final de la cadena, si coincide m , el reemplazo es *30 y + , y si coincide d , no se agrega ningún multiplicador.
  • (index !== source.length-1 ? '+' : '') comprueba si la coincidencia está al final de la cadena y añade + si es necesario. Funciona así porque la coincidencia siempre es un solo carácter.
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