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

222
Views
Regex para reordenar partes de la fecha en javascript

Tengo una fecha y un formato para esa fecha, dado por el usuario. (dmyyyy y 15.10.2021 utilizados para este ejemplo)

A partir de ese formato, necesito obtener la posición del año, mes y día, para poder usar esa posición en la fecha.

 const year = /y{4}|y{2}/.exec(format); const month = /m{1,2}/.exec(format); const day = /d{1,2}/.exec(format); const yearVal = date.substring(year.index, year.index + year[0].length);

El problema con esto es que el formato tiene 1 letra, pero mi fecha tiene 2 números. (d y 15). Así que obtengo 0.20 en lugar de 2021 ¿Cómo puedo cambiar esto para que funcione con todos los formatos diferentes?

Puedes ver todos los formatos posibles aquí: node-dateformat

Por ejemplo: la diferencia entre "d" y "dd" es así:

"d" Día del mes como dígitos; sin cero inicial para días de un solo dígito.

"dd" Día del mes como dígitos; cero inicial para días de un solo dígito.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Podría generar una expresión regular a partir del patrón como este:

 format.replace(/([ymd])\1*/g, (match, ymd) => `(?<${ymd}>${'\\d'.repeat(match.length)})`);

yyyy-mm-dd se convertirá en /(<?y>\d\d\d\d)-(<?m>\d\d)-(<?d>\d\d)/ , luego puede extraer el año/mes/día usando nombres de grupo:

 function getDates(format, date) { const regex = new RegExp(format.replace(/(\w)\1+|(\w)/g, ({length}, w, s) => `(?<${w||s}>${s ? '\\d+' : '\\d'.repeat(length)})`)); const result = date.match(regex); if(result) { const { y: year, m: month, d: day } = result.groups; return { year, month, day }; } } console.log(getDates('yyyy-mm-dd', '2021-10-15')); console.log(getDates('dd/mm/yyyy', '15/10/2021')); console.log(getDates('mm-dd-yy', '10-15-21')); console.log('----'); console.log(getDates('yyyy-m-d', '2021-9-15')); console.log(getDates('yyyy-m-d', '2021-10-6'));

about 4 years ago · Juan Pablo Isaza Report

0

Otra opción aquí para dividir el formato y el valor, busque a/m/d en el índice respectivo

 const lookup = ( format, value ) => { const f = format.split(/(m+|d+|y+)/).filter(Boolean); const v = value.split(/(\D+)/).filter(Boolean); return [ v[f.findIndex(i => i.startsWith('y'))], v[f.findIndex(i => i.startsWith('m'))], v[f.findIndex(i => i.startsWith('d'))] ]; } console.log(lookup('dmyyyy', '10.5.2021')); console.log(lookup('dmyyyy', '10.12.2021')); console.log(lookup('dd.mm.yyyy', '10.05.2021'));
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!