JavaScript动态创建输入的年月显示日历

先创建页面框架

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border: 1px solid orange;
        margin: 0 auto;
        padding: 20px;
        margin-top: 40px;
        border-radius: 15px;
      }
    </style>
  </head>
  <body>
    <!-- 放到table里面 -->
    <table>
      <!-- 在html里面先做一个日历 -->
      <tr>
        <!-- 这里动态写入年月 -->
        <th colspan="7"></th>
      </tr>
      <tr>
        <td>日</td>
        <td>一</td>
        <td>二</td>
        <td>三</td>
        <td>四</td>
        <td>五</td>
        <td>六</td>
      </tr>
    </table>

  </body>
</html>

获取用户输入的年月,将年月填入页面

var str = prompt("请输入年份和月份,中间用空格分开").split(" ");
var year = str[0];
var mon = str[1];

var table = document.querySelector("table");

// 将年月加入到th标签里面
document.querySelector("th").innerHTML = year + "年" + mon + "月";

dayCurrentMonth表示获取当前月份的最后一天

new Date(2023,9,1)  表示2023年10月的第一天

所以new Date(2023,9,0)  表示2023年9月的最后一天

再利用数组将本月日期存起来,注意此处用的是unshift()而不是push(),这样可以保证日期顺序与我们的阅读习惯保持一致性,方便理解

var dayCurrentMonth = new Date(year, mon, 0).getDate(); // 年,月,日

//获的把本月的1号是星期几
var firstDaytoWeekNumber = new Date(year, parseInt(mon) - 1, 1).getDay();

// 天数+星期几前面空出来的格子数量===td数量
var tdNum = dayCurrentMonth + firstDaytoWeekNumber;

// tr=Math.ceil(tdNum/7)
var dateArray = [];
for (var i = 0; i < tdNum; i++) {
    // 插入最后一天是多少号
    // 然后依次往前插入日期
    dateArray.unshift(dayCurrentMonth);
    dayCurrentMonth--;
}

确定行数,并将日期填入对应的td中

var trNum = Math.ceil(tdNum / 7);

var count = 0;

// 动态拼接
for (var i = 0; i < trNum; i++) {
    var tr = document.createElement("tr");
    for (var j = 0; j < 7; j++) {
        var td = document.createElement("td");

        // 创建的td里面写入刚才定义在数组中元素
        td.innerHTML =
        dateArray[count] <= 0 || !dateArray[count] ? "" : dateArray[count];
        count++;
        tr.appendChild(td);
    }
    table.appendChild(tr);
}

end

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要心安呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值