如何在 JavaScript 中禁用以前的日期

how to disable previous dates in JavaScript

我正在尝试在 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">

那么你认为我哪里做错了?

问题是当你进行字符串比较时,“2021/8/9”大于“2021/8/10”(9 大于 1)。您需要将这些 month/day 值正确地用零填充 (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");
}