Je veux comparer deux dates pour voir si elles sont identiques, tout en ignorant également le temps.
J'ai essayé d'utiliser la méthode .setHours (0,0,0,0) pour définir l'heure sur quelque chose de neutre, mais je ne peux pas utiliser la méthode .getTime () à cause de cette erreur.
La propriété 'getTime' n'existe pas sur le type 'number'
J'ai également recherché que je ne devrais pas utiliser ===, mais je ne peux pas surmonter le problème de getTime d'abord.
if (this.datelist.filter(x => new Date (x.sentDate).setHours(0,0,0,0).getTime() === this.searchQuery.getTime()).length == 0) {
console.log("No matches");
}
3 Réponses :
La Date # setHours renvoie déjà l'heure en une milliseconde, vous ne pouvez donc pas utiliser Date # getTime méthode sur une Number .
Depuis Date # setHours renvoie déjà l'heure à laquelle vous pouvez simplement ignorer Date # getTime et comparez avec la valeur renvoyée.
if (this.datelist.every(x => new Date(x.sentDate).setHours(0,0,0,0) !== this.searchQuery.getTime())) {
console.log("No matches");
}
Pour cela, vous pouvez utiliser Array # every méthode au lieu de Méthode Array # fileter .
if (this.datelist.filter(x => new Date(x.sentDate).setHours(0,0,0,0) === this.searchQuery.getTime()).length == 0) {
console.log("No matches");
}
Ugh, je savais que je manquais quelque chose de simple. Merci.
@ masu9: heureux que cela ait aidé :)
Votre problème est la concaténation des méthodes.
Quand vous avez thing.methodA (). methodB () , methodB fonctionnera avec tous les retours de methodA , et dans ce cas, setHours renvoie une heure MAIS en millisecondes à partir de baseDate, qui est un nombre, et n'a pas de méthode getTime () .
Votre solution utilise les setHours dans les deux objets après les avoir copiés, ce serait:
if (this.datelist.filter(x => new Date (x.sentDate).setHours(0,0,0,0) === this.searchQuery.setHours(0,0,0,0)).length === 0) {
console.log("nope!");
}
notez également que '===' doit être utilisé dans tous les cas toujours sauf quand vérification des valeurs vides (vous utilisez val == null ).
bravo!
Je recommande fortement Moment.js pour ce type d'opérations de date. C'est tellement plus facile avec Moment.js
moment('2019-04-25').isSame('2019-04-25'); // true
Il existe des méthodes de formatage disponibles pour convertir la date en AAAA-MM-JJ avant de comparer.
Double possible de Comparaison de la partie date uniquement sans comparer l'heure en JavaScript a>