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