validar validacion formularios formulario enviar ejemplos con attribute antes javascript date datetime momentjs

javascript - validacion - Compruebe si la fecha es válida



validar formulario javascript html5 (7)

El siguiente es el escenario:

Tengo una fecha de String y un formato de fecha que es diferente. Ex.:
fecha: 2016-10-19
dateFormat: "DD-MM-AAAA".

Necesito verificar si esta fecha es válida.

He intentado seguir las siguientes cosas

var d = moment("2016-10-19",dateFormat);

d.isValid() devuelve false cada vez. ¿Moment.js no analiza la fecha en el formato dado?

Luego intenté formatear la fecha en DD-MM-YYYY primero y luego pasarla a Moment.js:

var d = moment("2016-10-19").format(dateFormat); var date = moment(d, dateFormat);

Ahora date.isValid() me está dando el resultado deseado, pero aquí el objeto de fecha Moment.js se crea dos veces. ¿Cómo puedo evitar esto? ¿Hay una mejor solución?

FYI No estoy autorizado a cambiar el dateFormat .


Acabo de encontrar un caso realmente desordenado.

var dateFormat = ''DD-MM-YYYY'' var badDate = "2016-10-19"; var splittedDate = badDate.split(''-''); if (splittedDate.length == 3) { var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat); alert(d.isValid()) } else { //incorrectFormat }


Aquí tienes: Working Fidddle

$(function(){ var dateFormat = ''DD-MM-YYYY''; alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid()); });


Prueba este. No es agradable, pero funcionará siempre que la entrada tenga un formato constante desde su selector de fecha.

Es malo La fecha que viene de su selector en este ejemplo

https://jsfiddle.net/xs8tvox9/

moment(''Decimal128'', ''YYYY-MM-DD'').isValid() // true


Pude encontrar la solución. Dado que la fecha que obtengo está en formato ISO, solo proporcionar la fecha al momento lo validará, no es necesario pasar el dateFormat.

var date = moment("2016-10-19");

Y luego date.isValid() da el resultado deseado.


Uso momento junto con la nueva Fecha para manejar casos de valores de datos undefined :

const date = moment(new Date("2016-10-19"));

por: moment(undefined).isValid() == true

donde como la mejor manera: moment(new Date(undefined)).isValid() == false


var date = moment(''2016-10-19'', ''DD-MM-YYYY'', true);

Debe agregar un tercer argumento al invocar un moment que imponga un análisis estricto. Aquí está la parte relevante de la documentación del momento http://momentjs.com/docs/#/parsing/string-format/ Está cerca del final de la sección.


console.log(` moment(''2019-09-01'', ''YYYY-MM-DD'').isValid()? ` +moment(''2019-09-01'', ''YYYY-MM-DD'').isValid()) console.log(` moment(''2019-22-01'', ''YYYY-DD-MM'').isValid()? ` +moment(''2019-22-01'', ''YYYY-DD-MM'').isValid()) console.log(` moment(''2019-22-22'', ''YYYY-DD-MM'').isValid()? ` +moment(''2019-22-22'', ''YYYY-DD-MM'').isValid()) console.log(` moment(''undefined'', ''YYYY-DD-MM'').isValid()? ` +moment(''undefined'', ''YYYY-DD-MM'').isValid()) moment(''2019-09-01'', ''YYYY-MM-DD'').isValid()? true moment(''2019-22-01'', ''YYYY-DD-MM'').isValid()? true moment(''2019-22-22'', ''YYYY-DD-MM'').isValid()? false moment(''undefined'', ''YYYY-DD-MM'').isValid()? false