Я хочу сравнить две даты, чтобы увидеть, совпадают ли они, игнорируя время.
Я пытался использовать метод .setHours(0,0,0,0), чтобы установить время на что-то нейтральное, но тогда я не могу использовать метод .getTime() из-за этой ошибки.
Property 'getTime' does not exist on type 'number'
Я также исследовал, что мне не следует использовать ===, но я не могу сначала решить проблему с getTime.
if (this.datelist.filter(x => new Date (x.sentDate).setHours(0,0,0,0).getTime() === this.searchQuery.getTime()).length == 0) {
console.info("No matches");
}





Метод Date#setHours уже возвращает время в миллисекундах, поэтому вы не можете использовать метод Date#getTime для Number.
Поскольку метод Date#setHours уже возвращает время, вы можете просто проигнорировать метод Date#getTime и сравнить его с возвращенным значением.
if (this.datelist.filter(x => new Date(x.sentDate).setHours(0,0,0,0) === this.searchQuery.getTime()).length == 0) {
console.info("No matches");
}
Array#every method instead of Array#fileter method.
if (this.datelist.every(x => new Date(x.sentDate).setHours(0,0,0,0) !== this.searchQuery.getTime())) {
console.info("No matches");
}
Тьфу, знал, что мне не хватает чего-то простого. Спасибо.
@masu9: рад, что это помогло :)
Ваша проблема заключается в объединении методов.
Когда у вас есть thing.methodA().methodB(), methodB будет работать со всем, что возвращается из methodA, и в этом случае setHours возвращает время, НО в миллисекундах, из baseDate, которое является числом и не имеет метода getTime().
Ваше решение использует setHours в обоих объектах после их копирования, это будет:
if (this.datelist.filter(x => new Date (x.sentDate).setHours(0,0,0,0) === this.searchQuery.setHours(0,0,0,0)).length === 0) {
console.info("nope!");
}
также обратите внимание, что '===' следует использовать во всех случаях, кроме случаев проверки пустых значений (вы используете val == null).
ваше здоровье!
Я настоятельно рекомендую Момент.js для таких операций с датами. С Moment.js все намного проще
moment('2019-04-25').isSame('2019-04-25'); // true
Существуют методы форматирования, позволяющие преобразовать дату в ГГГГ-ММ-ДД перед сравнением.
Возможный дубликат Сравнение только части даты без сравнения времени в JavaScript