web-dev-qa-db-fra.com

Moment JS - vérifie si une date est aujourd'hui ou dans le futur

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?

167
Latheesan

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)
160
Aurélien Thieriot

utiliser la fonction isSame

var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate)
{
}
241
Grey Wolf
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
108
Akis

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

http://momentjs.com/docs/#/query/is-after/

61
dbasch

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 .

44
mpen

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 
8
Emaborsa

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");
6
Dipendu Paul

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!

6
jsidera

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;
  }
4
ethemsulan

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;

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.

3
Francois Nadeau
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)
2
Tanzeel

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");
2
Ali Adravi

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()">

1
Mo.