как отключить предыдущие даты в JavaScript

#javascript #date #calendar #fullcalendar

Вопрос:

Я пытаюсь создать календарь на JavaScript и пытаюсь отключить предыдущий день с сегодняшнего дня.

 for (var c = 0; c < 42 - r; c  ) {
        var v = e[c].day;
        var m = g(new Date(t, n - 1, v))
          ? `<div id="${v}/${n}/${t}" class="today" type="button" onclick="addRow(this)">`
          : z(new Date(t, n - 1, v))
          ? `<div class="past">`
          : `<div id="${v}/${n}/${t}" type="button" onclick="addRow(this)">`;
        l.append(
          m  
            ""  
            '<span class="month">'  
            i[n - 1]  
            "</span>"  
            ""  
            v  
            "</div>"
        );
    }
 

Итак, здесь v-день, n-месяц, а t — год. А вот функции g и z:

 function g(e) {
    return y(new Date()) == y(e);
  }
  function z(e) {
    return y(new Date()) > y(e);
  }
function y(e) {
    return e.getFullYear()   "/"   (e.getMonth()   1)   "/"   e.getDate();
  }
 

Поэтому я ожидаю, что предыдущие даты будут такими: <div class="past"> , сегодня так: <div id="${v}/${n}/${t}" class="today" type="button" onclick="addRow(this)"> и будущее таково: <div id="${v}/${n}/${t}" type="button" onclick="addRow(this)">

Но то , что у меня есть <div class="past"> , это <div id="${v}/${n}/${t}" class="today" type="button" onclick="addRow(this)"> , <div class="past">

Так где же, по-твоему, я делаю что-то не так?

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

1. Что же y делать? Если он вычисляет год, то да, завтрашний год, вероятно, в большинстве случаев совпадает с сегодняшним годом. Что делать,если вы удалите все y звонки из g и z.

2. Извините, забыл добавить это. Ознакомьтесь с отредактированным вопросом, пожалуйста

3. Это очень помогло бы, если бы вы использовали описательные имена переменных, чтобы код был семантическим. Использование цепных условных операторов вместо if..else значительно усложняет понимание кода, чем это должно быть. Кроме того, при этом не используется библиотека fullcalendar, поэтому тег не подходит.

Ответ №1:

Проблема в том, что «2021/8/9» больше, чем «2021/8/10» при сравнении строк (9 больше 1). Вам нужны эти значения месяца/дня, правильно заполненные нулем (2021/08/09) против (2021/08/10).

Попробуй

 function y(e) {
    return e.getFullYear()
        "/"   String(e.getMonth()   1).padStart(2, "0") 
        "/"   String(e.getDate()).padStart(2, "0");
}