Tous, J'utilise l'interface utilisateur de jQuery pour le sélecteur de date. J'essaie de vérifier avec JavaScript que la date d'entrée de l'utilisateur est passée. Voici mon code de formulaire:
<input type="text" id="datepicker" name="event_date" class="datepicker">
Alors comment vérifier cela avec Javascript pour m'assurer que ce n'est pas une date dans le passé? Merci
$('#datepicker').datepicker().change(evt => {
var selectedDate = $('#datepicker').datepicker('getDate');
var now = new Date();
now.setHours(0,0,0,0);
if (selectedDate < now) {
console.log("Selected date is in the past");
} else {
console.log("Selected date is NOT in the past");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<input type="text" id="datepicker" name="event_date" class="datepicker">
var datep = $('#datepicker').val();
if(Date.parse(datep)-Date.parse(new Date())<0)
{
// do something
}
Pour rendre la réponse plus réutilisable pour des choses autres que la fonction de changement de datepicker, vous pouvez créer un prototype pour gérer cela pour vous.
// safety check to see if the prototype name is already defined
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
Date.method('inPast', function () {
return this < new Date($.now());// the $.now() requires jQuery
});
// including this prototype as using in example
Date.method('addDays', function (days) {
var date = new Date(this);
date.setDate(date.getDate() + (days));
return date;
});
Si vous n'aimez pas le contrôle de sécurité, vous pouvez utiliser la méthode conventionnelle pour définir des prototypes:
Date.prototype.inPast = function(){
return this < new Date($.now());// the $.now() requires jQuery
}
Exemple d'utilisation
var dt = new Date($.now());
var yesterday = dt.addDays(-1);
var tomorrow = dt.addDays(1);
console.log('Yesterday: ' + yesterday.inPast());
console.log('Tomorrow: ' + tomorrow.inPast());