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

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

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