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

226
Vistas
¿Cómo validar si un valor de cadena es un formato de fecha analizable?

Estoy ejecutando el código a continuación, verificando si la cadena es una fecha. Uno de mis valores de entrada es 'text' que devuelve el valor NaN pero mi cláusula if no funciona como se esperaba.

 function isDate(myDate) { console.log('myDate = ' + myDate); return Date.parse(new Date(myDate)); } // var date1 = '1/5/22'; // good date var date1 = 'test'; // bad date var whatDate = isDate(date1); console.log('date = ' + whatDate); if (whatDate == 'NaN') { console.log('bad date'); } else { console.log('good date'); }

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

en su declaración if está comprobando si whatDate es igual a la cadena "NaN". lo que desea verificar si whatDate es un número o no.

puedes probar

 if (isNaN(whatDate))
about 4 years ago · Juan Pablo Isaza Denunciar

0

Ya casi estás ahí:

 if(whatDate == 'NaN'){ log.debug('bad date'); }else{ log.debug('good date'); }

En lugar de comparar whatDate con 'NaN' use la función isNaN() :

 if(isNaN(whatDate)){ log.debug('bad date'); }else{ log.debug('good date'); }

Alternativamente, si realmente desea comparar con 'NaN' , primero debe convertir whatDate en una cadena:

 if((whatDate + "") == 'NaN'){ log.debug('bad date'); }else{ log.debug('good date'); }

Es una posibilidad. Otra forma sería

 if(whatDate.toString() == 'NaN'){ log.debug('bad date'); }else{ log.debug('good date'); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

La siguiente respuesta, además de lo ya explicado sobre cómo detectar un valor NaN , quiere llegar más lejos.

Una función de verificación o prueba, especialmente si también lleva el prefijo is en su nombre , siempre debe devolver exclusivamente un valor booleano .

  • Por lo tanto, el OP primero implementaría dicha función de una manera que un usuario esperaría que funcione.
  • En segundo lugar, el OP tuvo que lidiar con el problema de NaN exactamente una vez dentro de la implementación de la función de prueba.

Editar de acuerdo y gracias a la aclaración de RobG.

... y ... de acuerdo con la especificación de ECMAScript con la creación de instancias de un objeto Date , el argumento pasado a la función constructora se analizará y asignará a la ranura interna thisTimeValue . El tipo de número de este último es el valor NaN para un argumento no analizable (no válido).

Cualquier operación relacionada con valueOf devuelve el valor de la ranura interna thisTimeValue .

Cualquier operación relacionada con toString calculará un formato de cadena de fecha a partir del último valor. Para thisTimeValue de NaN , el valor de cadena devuelto debe ser 'Invalid Date' .

Por lo tanto, una implementación de validación/prueba podría haber sido algo así como...

 function isParsableDateRepresentative(...args) { return String(new Date(...args)) !== 'Invalid Date'; }

... pero preferiblemente debería estar más cerca del próximo provisto ...

 function isParsableDateRepresentative(...args) { return !Number.isNaN(new Date(...args).valueOf()); }

Pruebas:

 function isParsableDateRepresentative(...args) { return !Number.isNaN(new Date(...args).valueOf()); } console.log('new Date("1/5/22") ...', new Date("1/5/22")); console.log( 'isParsableDateRepresentative("1/5/22") ...', isParsableDateRepresentative("1/5/22") ); console.log('\nnew Date("test") ...', new Date("test")); console.log( 'isParsableDateRepresentative("test") ...', isParsableDateRepresentative("test") ); console.log('\nnew Date(new Date("test")) ...', new Date(new Date("test"))); console.log( 'isParsableDateRepresentative(new Date("test")) ...', isParsableDateRepresentative(new Date("test")) ); console.log('\nnew Date() ...', new Date()); console.log( 'isParsableDateRepresentative() ...', isParsableDateRepresentative() ); console.log('\nnew Date(null) ...', new Date(null)); console.log( 'isParsableDateRepresentative(null) ...', isParsableDateRepresentative(null) ); console.log('\nnew Date(undefined) ...', new Date(undefined)); console.log( 'isParsableDateRepresentative(undefined) ...', isParsableDateRepresentative(undefined) ); console.log('\nnew Date("") ...', new Date("")); console.log( 'isParsableDateRepresentative("") ...', isParsableDateRepresentative("") );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

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