J'essaie d'utiliser momentjs
pour vérifier si une date donnée est aujourd'hui ou dans le futur.
C'est ce que j'ai jusqu'ici:
<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
alert('date is today or in future');
} else {
alert('date is in the past');
}
</script>
Le code évalue ma date (31 janvier 2014) comme une date passée.
Une idée de ce que je fais mal?
Après avoir lu la documentation: http://momentjs.com/docs/#/displaying/difference/ , vous devez considérer la fonction diff
comme un opérateur moins.
// today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0
Par conséquent, vous devez inverser votre condition.
Si vous voulez vérifier que tout va bien, vous pouvez ajouter un paramètre supplémentaire à la fonction:
moment().diff(SpecialTo, 'days') // -8 (days)
utiliser la fonction isSame
var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate)
{
}
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
Vous pouvez utiliser la fonction de requête isAfter()
de momentjs:
Vérifiez si un moment est après un autre moment.
moment('2010-10-20').isAfter('2010-10-19'); // true
Si vous souhaitez limiter la granularité à une unité autre que millisecondes, transmettez les unités en tant que deuxième paramètre.
moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true
Comme personne ne semble l'avoir mentionné pour l'instant, le moyen le plus simple de vérifier si un objet de date Moment appartient au passé:
momentObj.isBefore()
Ou à l'avenir:
momentObj.isAfter()
Laissez simplement les arguments vides - ce sera le cas par défaut maintenant.
Il y a aussi isSameOrAfter
et isSameOrBefore
.
N.B. cela compte dans le temps. Si vous ne vous souciez que de la journée, voir Réponse de Dipendu .
Pour vérifier si c'est aujourd'hui :
Si nous comparons deux dates qui contiennent aussi les informations de temps, isSame
va évidemment échouer diff
échouera si les deux dates s'étendent sur la nouvelle journée:
var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds
Je pense que le meilleur moyen, même si ce n’est pas rapide et court, est le suivant:
var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()
Pour vérifier si c'est dans le futur :
Comme suggéré également par d'autres utilisateurs, la méthode diff
fonctionne.
var isFuture = now.diff(anotherDate) < 0
invert isBefore méthode du moment pour vérifier si une date est identique à celle d'aujourd'hui ou à l'avenir comme ceci
!moment(yourDate).isBefore(moment(), "day");
Si vous avez seulement besoin de savoir lequel est le plus gros, vous pouvez aussi les comparer directement:
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment() > SpecialTo) {
alert('date is today or in future');
} else {
alert('date is in the past');
}
J'espère que cela t'aides!
si firstDate est identique ou après (futur) secondDate return true else renvoie false. Toda est firstDate = new Date ();
static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isSameOrBefore(date2,'day');
}
return false;
}
Il y a isSame, isBefore et isAfter pour le jour, comparez le moment;
static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if (date1 && date2) {
return date1.isSame(date2,'day');
}
return false;
}
static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isAfter(date2,'day');
}
return false;
}
static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
var date1 = moment(firstDate);
var date2 = moment(secondDate);
if(date1 && date2){
return date1.isBefore(date2,'day');
}
return false;
}
Juste au cas où quelqu'un aurait besoin de ça, faites ceci:
const isToday = moment(0, "HH").diff(date, "days") == 0;
ou si vous voulez une fonction:
isToday = date => moment(0,"HH").diff(date, "days") == 0;
Où date est la date que vous souhaitez vérifier.
Explication
moment(0, "HH")
renvoie le jour d'aujourd'hui à minuit.
date1.diff(date2, "days")
renvoie le nombre de jours entre la date1 et la date2.
function isTodayOrFuture(date){
date = stripTime(date);
return date.diff(stripTime(moment.now())) >= 0;
}
function stripTime(date){
date = moment(date);
date.hours(0);
date.minutes(0);
date.seconds(0);
date.milliseconds(0);
return date;
}
Et ensuite, utilisez-le comme suit:
isTodayOrFuture(YOUR_TEST_DATE_HERE)
Utilisez le plus simple pour vérifier la date future
if(moment().diff(yourDate) >= 0)
alert ("Past or current date");
else
alert("It is a future date");
Sélectionnez hier pour vérifier les jours passés ou non avec l'aide de moment().subtract(1, "day");
Référence: - http://momentjs.com/docs/#/manipulating/subtract/
function myFunction() {
var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
var SpecialToDate = document.getElementById("theDate").value;
if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
alert("date is today or in future");
console.log("date is today or in future");
} else {
alert("date is in the past");
console.log("date is in the past");
}
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">