Voici le scénario:
J'ai une String
date et un format de date différents. Ex .:
date: 2016-10-19
dateFormat: "JJ-MM-AAAA".
Je dois vérifier si cette date est une date valide.
J'ai essayé de suivre les choses
var d = moment("2016-10-19",dateFormat);
d.isValid()
revient à false
chaque fois. Moment.js n'analyse-t-il pas la date dans le format donné?
Ensuite, j'ai essayé de formater la date en DD-MM-YYYY
premier, puis de la transmettre à Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Cela date.isValid()
me donne maintenant le résultat souhaité, mais ici l'objet de date Moment.js est créé deux fois. Comment puis-je éviter ça? Y a-t-il une meilleure solution?
Pour info, je ne suis pas autorisé à modifier le fichier dateFormat
.
javascript
date
datetime
momentjs
Ganesh
la source
la source
Réponses:
A pu trouver la solution. Étant donné que la date que j'obtiens est au format ISO, seule la fourniture de date à moment la validera, pas besoin de passer le dateFormat.
Et
date.isValid()
donne ensuite le résultat souhaité.la source
var a = moment('12345'); a.isValid() // is true
cela échoue car le moment reviendra à l'objet de date par défaut s'il ne peut pas analyser la date. Et l'objet de date par défaut renverra toujours une date (mais pas celle que vous voulez.)moment('02').isValid() === true
, alors vous voudrez peut-être faire attention avec celamoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Vous devez ajouter un troisième argument lors de l'appel
moment
qui impose une analyse stricte. Voici la partie pertinente de la documentation du moment http://momentjs.com/docs/#/parsing/string-format/ Elle se trouve vers la fin de la section.la source
Ici vous allez: Working Fidddle
la source
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?J'utilise moment avec new Date pour gérer les cas de
undefined
valeurs de données:const date = moment(new Date("2016-10-19"));
en raison de:
moment(undefined).isValid() == true
où comme le meilleur moyen:
moment(new Date(undefined)).isValid() == false
la source
Je viens de trouver une affaire vraiment foirée.
la source
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
. Utilisez le mode strict :) momentjs.com/guides/#/parsing/strict-modeComment vérifier si une chaîne est une date valide à l'aide de Moment, lorsque la date et le format de date sont différents
Désolé, mais l'une des solutions proposées sur ce fil de discussion a-t-elle réellement répondu à la question posée?
Ce qui suit fonctionne pour moi ...
Mais honnêtement, je ne comprends pas pourquoi
moment.isDate()
( tel que documenté ) n'accepte qu'un objet. Devrait également supporter une chaîne à mon avis.la source
la source
Si la date est valide, le
getTime()
sera toujours égal à lui-même.la source
Essaye celui-là. Ce n'est pas sympa mais cela fonctionnera tant que l'entrée est au format constant de votre sélecteur de date.
C'est badDate provenant de votre sélecteur dans cet exemple
https://jsfiddle.net/xs8tvox9/
la source