3 votes

Comment vérifier correctement si une date est identique ou postérieure à aujourd'hui avec MomentJS ?

J'essaie de valider un champ pour qu'il ne contienne pas de date antérieure à aujourd'hui. J'utilise MomentJS et les fonctions suivantes :

  • est une date valide et j'utilise isValid()
  • est le même qu'aujourd'hui ou après et j'utilise isSameOrAfter()

C'est comme ça que je fais :

$("#btn").click(function(){
    const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
    console.log(value)

    //console.log(value.isValid() && value.isSameOrAfter(moment(new Date(), 'MM/DD/YYYY')))
    //console.log(value.isValid() && value.isSameOrAfter(moment()))
    console.log(value.isValid() && value.isSameOrAfter(moment(new Date())))
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

<input type="text" name="field" id="field" />
<button id="btn">Click Me</button>

Je ne suis pas sûr de ce que je pourrais manquer ici, mais comme vous pouvez le voir, cela ne fonctionne pas et j'ai essayé trois façons différentes (commenté sur le snippet ci-dessus).

Une chose que j'ai remarquée est que le moment() retourne la date au format TimeZone : 2018-08-10T04:00:00.000Z Est-ce que cela pourrait briser la validation ?

Qu'est-ce que je rate ici ?

2voto

Bucket Points 5908

Vous pouvez spécifier la granularité de moment#isSameOrAfter en spécifiant l'unité de granularité comme second paramètre :

const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
console.log(value.isValid() && value.isSameOrAfter(moment(new Date()), 'day'));

Les unités de temps acceptées sont : year month week day hour minute second . Si vous ne spécifiez pas la granularité, moment sera défini par défaut en millisecondes.

http://jsfiddle.net/dp7rzmw5/24211/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X