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

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

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 Report

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 Report

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