Проверка того, является ли дата в JS 3-летней давности или более

#javascript #typescript

Вопрос:

Поэтому я пытаюсь понять, как сравнить две даты в машинописном тексте. У меня есть введенная пользователем дата:

 const oldestDateString = this.address[0].since   '-01';
const oldestDate = new Date(oldestDateString);
 

И дата, которая произошла три года назад (36 месяцев):

 const threeYearsAgo = new Date().setMonth(new Date().getMonth() - 36);
 

Поэтому я иду, чтобы сравнить их, как показано ниже:

 if (oldestDate >= threeYearsAgo) {
      // Do Something
    }
 

Но я получаю ошибку при сравнении:

 Operator '<' cannot be applied to types 'Date' and 'number'.
 

Чего я не понимаю, так это почему один из них-это номер, конечно, они оба должны быть датами? Есть ли какой-нибудь способ сравнить эти два или вывести их в соответствующем формате? Это не обязательно должно быть решение для машинописи, я не возражаю даже против использования vanilla JS.

Я просто не хочу использовать MomentJS, так как эта конкретная функция в moment, похоже, не работает на некоторых iPhone.

Старый скрипт MomentJS для справки:

 const oldestDate = this.address[0].since   '-01';
    const months = moment().diff(moment(oldestDate), 'month', true);
    if (months >= 36) {
      return true;
    } else {
      return false;
    }
 

Комментарии:

1. const threeYearsAgo = new Date();threeYearsAgo.setMonth(new Date().getMonth() - 36); вы получаете число, потому setMonth что возвращает число

Ответ №1:

setMonth возвращает номер, а не дату. ТС придирчив к этому. Вместо этого сравните дату, на которую вы вызвали эту функцию set.

 const threeYearsAgo = new Date();
threeYearsAgo.setMonth(new Date().getMonth() - 36);
 

Комментарии:

1. Это работает на рабочем столе, но по какой-то причине не на iPhone

Ответ №2:

Это потому , что вы сохраняете не дату threeYearsAgo , а возвращаемое значение setMonth .

Дата.Документы за месяц

Возвращаемое значение
Количество миллисекунд между 00:00:00 UTC 1 января 1970 года и обновленной датой.

Итак, вы хотите

 const threeYearsAgo = new Date();
threeYearsAgo.setMonth(new Date().getMonth() - 36)
 

Комментарии:

1. Это работает на рабочем столе, но по какой-то причине не на iPhone

2. Просто протестировал его в Safari на iOS 12, и он отлично работает. Скорее всего, это что-то другое. Какую ошибку вы получаете на iPhone?

3. Я предполагаю, что это либо что-то связано с настройками компиляции ts , либо с использованием this.address , поскольку this часто может быть странным