web-dev-qa-db-fra.com

Comparer la date d'aujourd'hui avec une autre date dans le moment renvoie une mauvaise date, pourquoi?

J'utilise moment.js 1.7.0 pour essayer de comparer la date d'aujourd'hui avec une autre date mais la fonction diff dit qu'ils sont à 1 jour d'intervalle pour une raison quelconque.

code :

var releaseDate = moment("2012-09-25");
var now = moment(); //Today is 2012-09-25, same as releaseDate  
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD"));
console.log("NOW: " + now.format("YYYY-MM-DD"));
console.log("DIFF: " + now.diff(releaseDate, 'days'));

console :

RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1 

Des idées?

27
manafire

Basé sur documentation (et de brefs tests), moment.js crée des wrappers autour des objets de date. La déclaration:

var now = moment();

crée un objet "moment" qui, en son cœur, a un nouvel objet Date créé comme par new Date(), de sorte que les heures, les minutes et les secondes seront définies à l'heure actuelle.

La déclaration:

var releaseDate = moment("2012-09-25");

crée un objet Moment qui a en son cœur un nouvel objet Date créé comme par new Date(2012, 8, 25) où les heures, minutes et secondes seront toutes mises à zéro pour le fuseau horaire local.

moment.diff Renvoie une valeur basée sur la différence arrondie en ms entre les deux dates. Pour voir la valeur complète, passez true comme troisième paramètre:

 now.diff(releaseDate, 'days', true)
 ------------------------------^

Cela dépendra donc de l'heure de la journée où le code est exécuté et du fuseau horaire local, que now.diff(releaseDate, 'days') soit zéro ou un, même lorsqu'il est exécuté à la même date locale.

Si vous souhaitez comparer uniquement les dates, utilisez:

var now = moment().startOf('day'); 

qui définira l'heure à 00:00:00 dans le fuseau horaire local.

55
RobG

La réponse de RobG est correcte pour la question, donc cette réponse est juste pour ceux qui cherchent à comparer les dates dans momentjs.

J'ai essayé d'utiliser startOf ('day') comme mentionné ci-dessus:

var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');

Cela n'a pas fonctionné pour moi.

J'ai dû utiliser isSame :

var compare = moment(dateA).isSame(dateB, 'day');
2
zacharydl