El siguiente es el escenario:
Tengo una String
fecha y un formato de fecha que es diferente. Ej .
: 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()
Está volviendo false
cada vez. ¿Moment.js no analiza la fecha en el formato dado?
Luego intenté formatear la fecha 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 tengo permitido cambiar el dateFormat
.
javascript
date
datetime
momentjs
Ganesh
fuente
fuente
Respuestas:
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.
Y luego
date.isValid()
da el resultado deseado.fuente
var a = moment('12345'); a.isValid() // is true
esto falla porque el momento volverá al objeto de fecha predeterminado si no puede analizar la fecha. Y el objeto de fecha predeterminado siempre devolverá una fecha (simplemente no la que desea).moment('02').isValid() === true
, por lo que es posible que tenga cuidado con esomoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Debería agregar un tercer argumento al invocar
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.fuente
Aquí tienes: Working Fidddle
fuente
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?Uso momento junto con la nueva Fecha para manejar casos de
undefined
valores de datos:const date = moment(new Date("2016-10-19"));
porque:
moment(undefined).isValid() == true
donde como la mejor manera:
moment(new Date(undefined)).isValid() == false
fuente
Acabo de encontrar un caso realmente desordenado.
fuente
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
. Use el modo estricto :) momentjs.com/guides/#/parsing/strict-modeCómo verificar si una cadena es una fecha válida usando Moment, cuando la fecha y el formato de fecha son diferentes
Lo sentimos, pero ¿alguna de las soluciones dadas en este hilo realmente respondió la pregunta que se hizo?
Lo siguiente funciona para mí ...
Pero, sinceramente, no entiendo por qué
moment.isDate()
( como se documenta ) solo acepta un objeto. También debería admitir una cadena en mi opinión.fuente
fuente
Si la fecha es válida
getTime()
, siempre será igual a sí misma.fuente
Prueba este. No es agradable, pero funcionará siempre que la entrada sea un formato constante desde su selector de fecha.
Es malo La fecha que viene de su selector en este ejemplo
https://jsfiddle.net/xs8tvox9/
fuente