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

488
Vistas
Cómo validar la fecha futura de vencimiento de la tarjeta en javascript

Debo agregar una validación para el vencimiento de la tarjeta donde debo mostrar un mensaje de error si la tarjeta está a punto de vencer dentro de los 3 meses a partir de la fecha actual

ex:

 (month/year)1221 input --> false (invalid) 1121 input --> false (invalid) 122 input --> false (invalid) 221 input --> true (valid) 222 input --> true (valid)

Desde el backend, este es el valor que obtengo valor = 424 --> 4 es el mes y 24 es el año que es válido y si desde el backend obtengo 1121 ---> 11 es el mes y 21 es el año que es inválido

¿Cómo validar si la fecha 1121 está dentro de los 3 meses?

A continuación se muestra la solución que estoy usando, pero no encuentro otras soluciones.

 const d = new Date(); let today = d.getDate(); expValue = 424; const originalValue = expValue.toString().split(/(?=(?:.{2})+$)/g); if ( originalValue[0] >= today.month.toString() + 3 || originalValue[1] === today.year.toString() ) { return this.sanitizer.bypassSecurityTrustHtml( '<span class="text-danger">' + ('0' + originalValue[0]).slice(-2) + '/' + originalValue[1] + '</span>' ); } else { return this.sanitizer.bypassSecurityTrustHtml( ('0' + originalValue[0]).slice(-2) + '/' + originalValue[1] ); } }

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Usando las entradas originales que diste, puedes hacer algo como esto:

 let inputs = ['12/21', '11/21', '01/22', '02/21', '12/22']; const parseDate =(e)=>{ return new Date(e.replace('/', '/1/')); }; const getDiff = (e)=>{ let curr = new Date(); let dt = parseDate(e); return (dt.getMonth() - curr.getMonth() + (12 * (dt.getYear() - curr.getYear()))) > 3; } inputs.forEach(el=>console.log(`${el} >> ${getDiff(el)}`));

Si sus entradas están en un formato diferente o si tiene que tener en cuenta las cadenas que no siempre tienen la misma longitud, es posible que deba ajustar la función parseDate. Si está trabajando con una cadena de longitud variable sin el "/" incluido, entonces puede intentar algo como esto, usando las nuevas entradas que proporcionó:

 let inputs = ['1221', '1121', '122', '221', '222']; const parseDate =(e)=>{ if(e.length==3) { e = '0'+e; } return new Date(`${e.substring(0,2)}/1/${e.slice(-2)}`); }; const getDiff = (e)=>{ let curr = new Date(); let dt = parseDate(e); return (dt.getMonth() - curr.getMonth() + (12 * (dt.getYear() - curr.getYear()))) > 3; } inputs.forEach(el=>console.log(`${el} >> ${getDiff(el)}`));

Modifico la función parseDate para rellenar la cadena si la longitud es 3 (creo que siempre será 3 o 4), luego creo una fecha a partir de los dos primeros caracteres y los dos últimos caracteres, luego devuelvo eso, y todo lo demás es lo mismo.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que la mejor manera de hacerlo es traducir las fechas en unidades que se adapten al problema. JS date getYear() da meses desde 1990, y esa es una unidad común prácticamente útil.

Ponga la fecha de la cadena de entrada y la fecha actual en unidades de meses desde 1990, luego compare...

 const monthsSince1900 = string => { let chars = string.split(''); let month = +chars.slice(0, -2).join(''); let year = +chars.slice(-2).join(''); return 12 * (100 + year) + month }; const currentMonthsSince1990 = () => { let d = new Date(); return 12 * d.getYear() + d.getMonth() + 1; } const isExpiryValid = string => { let now = currentMonthsSince1990() let exp = monthsSince1900(string); return exp > now + 3 } console.log(isExpiryValid('1121')); // 11/21 will expire soon console.log(isExpiryValid('1221')); // 12/21 will expire soon console.log(isExpiryValid('122')); // 1/22 will expire soon console.log(isExpiryValid('222')); // 2/22 is good console.log(isExpiryValid('322')); // 3/22 is good

over 4 years ago · Santiago Trujillo 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