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

184
Vistas
Js devuelve la fecha de inicio y la fecha de finalización en una cadena

Tengo cadenas como esta:

 (Feb 28-Mar 1) (Mar 2-3)

Me gustaria que me devuelvan un objeto como se puede ver a continuacion, alguien que me de alguna sugerencia como puedo hacer?

 function rD(text){ let date = text.replace('(', '').replace(')', '').split(' '); //const [start, end] = date[2].split("-").map(Number); return date; } console.log(rD("(Feb 28-Mar 1)")) console.log(rD("(Mar 2-3)"))

Devolver:

 [ { month: 2, day: 28 }, { month: 3, day: 1 } ] [ { month: 3, day: 2 }, { month: 3, day: 3 } ]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Quitaría los paréntesis primero y luego los dividiría por /[ -]/ . De esta manera obtienes una matriz en una de estas dos formas.

 ["Feb", "28", "Mar", "1"]

o

 ["Mar", "2", "3"]

Ahora, si la matriz tiene 4 elementos, el primero y el tercero son siempre el mes y el segundo y el siguiente son el día. Si la matriz tiene 3 elementos, el primero es un mes tanto para el inicio como para el final, el segundo y el tercero son los días.

Para obtener el número del mes, puede realizar una búsqueda simple como

 { Jan:1, Feb:2, ... } 

 let months = { Jan: 1, Feb: 2, Mar: 3 /* you get the idea*/} let spans = ["(Jan 28 - Feb 3)", "(Mar 1-3)"] let parse = (span) => { let parts = span.replace(/[()]/g, "").split(/[ -]/).filter(x => !!x); switch (parts.length) { case 4: return [{month: months[parts[0]], date: +parts[1]}, {month: months[parts[2]], date: +parts[3]}]; case 3: return [{month: months[parts[0]], date: +parts[1]}, {month: months[parts[0]], date: +parts[2]}]; default: return undefined; } } console.log(parse(spans[0])); console.log(parse(spans[1]))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Sugeriría usar un patrón de expresiones regulares para analizar cada tramo.

De esto podemos obtener startMonth, startDay, endMonth, endDay. Luego podemos crear una función getMonthNumber() para convertir el nombre del mes abreviado (enero, febrero, etc.) en un número.

 function getMonthNumber(month) { const lookup = { jan: 01, feb: 02, mar: 03, apr: 04, may: 05, jun: 06, jul: 07, aug: 08, sep: 09, oct: 10, nov: 11, dec: 12}; return lookup[(month + '').toLowerCase()] } function parseSpan(str) { const pattern = /\(([az]{3})\s+(\d{1,2})\-([az]{3})?\s?(\d{1,2})\)/i const [, startMonth, startDay, endMonth, endDay] = str.match(pattern); return [ { month: getMonthNumber(startMonth), day: +startDay }, { month: getMonthNumber(endMonth || startMonth), day: +endDay } ]; } let testInputs = [ '(Feb 28-Mar 1)', '(Mar 2-3)', '(Sep 28-Oct 31)', '(Jan 3-17)' ] testInputs.map(parseSpan).forEach(span => console.log(span))
 .as-console-wrapper { max-height: 100% !important; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes probar esto

 function rangeCalcFunc(range = null) { if(range && range.length){ const [start, end] = range.substring(1, range.length-1).split("-"); console.log(start);console.log(end); const [startMon, startDt] = start.split(" "); const [endMon, endDt] = end.split(" "); return [ { month: calcMonthInNumber(startMon.trim()), date: startDt }, { month: calcMonthInNumber(endMon.trim()), date: endDt } ] } } function calcMonthInNumber(month) { switch(month.toLowerCase()){ case 'jan': return '01' case 'feb': return '02' //add for other months default: break; } } console.log(rangeCalcFunc("(Jan 28-Feb 1)"));

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