写的很随便的一个js日历

日历需要的页面元素

当前日历主要包含三个部分的元素分别是:

1.当前日期

2.月份以及年份跳转按钮

3.当前这个月的所有日期显示

个人实现思路

1.先写好当前时间年份月份静态元素,通过document.querySelectorAll().forEach((item)=>{})绑定每一个月份和年份跳转的按钮,实例化 new Date 并赋值给date。

分别使用

date.getFullYear();获取当前年份

date.getMonth() + 1;获取当前月份(月份从0开始计算到11结束)

date.getDate();获取当前日期

let week = date.getDay();获取当天的星期数(从星期天开始到星期六结束)0-6

2.开始渲染当前这个月所有的日期数

渲染的日期数有三个部分:当前月份,当月一号之前的天数,当月最后一天后面的天数的部分,

先从月份前天数开始,获取上一个月最后一天的星期数,上个月最后一天的天数,相减获取第一行星期一的天数。以最后一天星期数作为结束条件开始循环。

给每一个div元素添加样式 使用setAttribute("添加的属性名","添加的属性值")

(本实例使用chineseLunar插件提供的阳历阴历转换功能)

function weekLastSpace(date) {
  let week = new Date(date.getFullYear(), date.getMonth(), 0).getDay();//获取上个月的最后一天星期数
  let lastMendDay = new Date(date.getFullYear(), date.getMonth(), 0).getDate();
  lastMendDay = lastMendDay - week;//获取第一行第一天的数字
  for (let i = 0; i < week; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStrLast);
    lastMendDay++;
    div.innerHTML = lastMendDay + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth() - 1, lastMendDay)), 'D');
    document.querySelector(".contentDay").appendChild(div);//插入到页面元素中
  }
}

 当月天数渲染需要获取当月天数第一天和最后一天的数之后套入循环插入到dom元素中

ps:(Date对象在日期参数中写上0就会使当前日期对象变为上一个月最后一天)

function divDay(date) {
  let dayend = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();//获取这个月的最后一天
  let nowday = new Date().getDate();
  for (let i = 1; i <= dayend; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStr);
    div.innerHTML = i + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth(), i)), 'D');
    if (i == nowday) {
      div.style.color = "red";
    }
    document.querySelector(".contentDay").appendChild(div);
  }
}

最后一天自己看代码也都懂

function weekendspace(date) {
  //获取当前这个月最后一天是星期几
  let dayendweek = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDay();
  for (let i = 1; i <= 7 - dayendweek; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStrLast);
    div.innerHTML = i + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth() + 1, i)), 'D');;
    document.querySelector(".contentDay").appendChild(div);
  }
}

以下附上全部js代码(如有不对欢迎大佬前来指正)

let date = new Date();
let y = date.getFullYear();
let m = date.getMonth() + 1;
let d = date.getDate();
let week = date.getDay();
document.querySelector(".Ym").innerHTML = `${y}年${m}月${d}日`;
let content = document.querySelector(".content");
let cssStr = `width:14%; height:10%; display: inline-block; text-align: center;`;
let cssStrLast = "width:14%; height:10%; display: inline-block; text-align: center; color:gray;";
console.log(document.querySelectorAll("#index > div > button"));
//给所有的按钮绑定点击使事件
document.querySelectorAll("#index > div > button").forEach((item) => {
  item.onclick = function () {
    document.querySelector(".contentDay").innerHTML = "";
    if (this.innerHTML == "上一年") {

      date.setFullYear(date.getFullYear() - 1);
    } else if (this.innerHTML == "上个月") {

      date.setMonth(date.getMonth() - 1 < -1 ? 11 : date.getMonth() - 1);
      date.setFullYear(date.getMonth() - 1 < -1 ? date.getFullYear() - 1 : date.getFullYear());
    } else if (this.innerHTML == "下个月") {

      date.setMonth(date.getMonth() + 1 > 12 ? 0 : date.getMonth() + 1);
      date.setFullYear(date.getMonth() + 1 > 12 ? date.getFullYear() + 1 : date.getFullYear());
    } else if (this.innerHTML == "下一年") {

      date.setFullYear(date.getFullYear() + 1);
    }
    weeklastspace(date);
    divDay(date);
    weekendspace(date);
    document.querySelector(".Ym").innerHTML = `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
  }
})
//渲染日期前面空格
/**
 * 渲染一号之前的日期
 * @param {Date} date 当前时间Date对象
 */
function weeklastspace(date) {
  let week = new Date(date.getFullYear(), date.getMonth(), 0).getDay();//获取上个月的最后一天
  let lastMendDay = new Date(date.getFullYear(), date.getMonth(), 0).getDate();
  lastMendDay = lastMendDay - week;//获取第一行第一天的数字
  for (let i = 0; i < week; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStrLast);
    lastMendDay++;
    div.innerHTML = lastMendDay + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth() - 1, lastMendDay)), 'D');
    document.querySelector(".contentDay").appendChild(div);
  }
}
weeklastspace(date);
//渲染日期
/**
 * 渲染当前这个月的所有日期
 * @param {Date} date 
 */
function divDay(date) {
  let dayend = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();//获取这个月的最后一天
  let nowday = new Date().getDate();
  for (let i = 1; i <= dayend; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStr);
    div.innerHTML = i + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth(), i)), 'D');
    if (i == nowday) {
      div.style.color = "red";
    }
    document.querySelector(".contentDay").appendChild(div);
  }
}
divDay(date);
//渲染div后面的空格
/**
 * 渲染后面时间日期
 * @param {Date} date 
 */
function weekendspace(date) {
  //获取当前这个月最后一天是星期几
  let dayendweek = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDay();
  for (let i = 1; i <= 7 - dayendweek; i++) {
    let div = document.createElement("div");
    div.setAttribute("style", cssStrLast);
    div.innerHTML = i + "<br>" + chineseLunar.format(chineseLunar.solarToLunar(new Date(date.getFullYear(), date.getMonth() + 1, i)), 'D');;
    document.querySelector(".contentDay").appendChild(div);
  }
}
weekendspace(date);
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>日历</title>
  
  <style>
    #index{
      width: 500px;
      height: 400px;
      border:3px solid #000;
      display:flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    .content{
      min-width: 100%;
      height: 80%;
      border: 1px solid #000;
      flex-direction: column;
    }
  </style>
</head>
<body>
  <div id="index">
    <span class="Ym">2022年12月11日</span>
    <div>
      <button class="Y last" >上一年</button>
      <button class="M last" >上个月</button>
      <button class="M Next" >下个月</button>
      <button class="Y next" >下一年</button>
    </div>
    <div class="content" style="display: flex;">
      <div class="week" style="height: 10%; display:flex; justify-content:space-evenly;">
        <div>星期一</div>
        <div>星期二</div>
        <div>星期三</div>
        <div>星期四</div>
        <div>星期五</div>
        <div>星期六</div>
        <div>星期日</div>
      </div>
      <div class="contentDay" style="height: 90%;"></div>
    </div>
  </div>
</body> 

<script src="./node_modules/chinese-lunar/lib/chinese-lunar.js"></script>
<script src="./htmljs.js"></script>
</html>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 手一个日历可能比较复杂,但可以使用 JavaScript 的 `Date` 对象和一些日期处理函数来实现。下面是一个简单的实现: ``` // 获取当前日期 var now = new Date(); // 获取当前月份 var month = now.getMonth(); // 获取当前年份 var year = now.getFullYear(); // 创建日历的表格 var table = document.createElement("table"); table.setAttribute("border", "1"); table.setAttribute("cellspacing", "0"); table.setAttribute("cellpadding", "5"); document.body.appendChild(table); // 创建表格的标题行 var caption = table.createCaption(); caption.innerHTML = year + "年" + (month + 1) + "月"; var thead = document.createElement("thead"); table.appendChild(thead); var tr = document.createElement("tr"); thead.appendChild(tr); var th = null; for (var i = 0; i < 7; i++) { th = document.createElement("th"); tr.appendChild(th); } th.innerHTML = "星期日"; th.innerHTML = "星期一"; th.innerHTML = "星期二"; th.innerHTML = "星期三"; th.innerHTML = "星期四"; th.innerHTML = "星期五"; th.innerHTML = "星期六"; // 创建表格的主体部分 var tbody = document.createElement("tbody"); table.appendChild(tbody); for (var i = 0; i < 6; i++) { tr = document.createElement("tr"); tbody.appendChild(tr); for (var j = 0; j < 7; j++) { td = document.createElement("td"); tr.appendChild(td); } } // 计算当前月份的天数 var days = new Date(year, month + 1, 0).getDate(); // 计算当前月份第一天是星期几 var firstDay = new Date(year, month, 1).getDay(); // 填充表格的主体部分 var count = 1; for (var i = 0; i < 6; i++) { for (var j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { // 填充空 ### 回答2: 要手一个JS星期日历,可以按照以下步骤进行: 1. 首先创建一个HTML文件,定义一个容器元素,用于显示日历的表格。 2. 在JS文件中,使用`Date`对象获取当前日期的年份和月份信息,并存储在变量中。 3. 使用`switch`语句确定当前月份的天数,并存储在一个名为`daysInMonth`的变量中。 4. 创建一个名为`calendar`的函数,用于创建和填充日历表格。 5. 在`calendar`函数中,使用`document.createElement()`方法创建HTML元素:表格、行和单元格。 6. 在循环中,根据`daysInMonth`变量的值创建和填充表格的行和单元格。 7. 在每个单元格中,使用Date对象的`getDate()`方法获取日期,并将其填充到单元格中。 8. 使用CSS样式来美化日历表格,例如设置表格边框、单元格宽度、字体样式等。 9. 调用`calendar`函数,将日历表格添加到HTML容器元素中,以便在网页上显示出来。 以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>JS星期日历</title> <style> table { border-collapse: collapse; } td { border: 1px solid black; width: 50px; height: 50px; text-align: center; font-weight: bold; } </style> </head> <body> <div id="calendar"></div> <script> var currentDate = new Date(); var currentYear = currentDate.getFullYear(); var currentMonth = currentDate.getMonth(); var daysInMonth; switch(currentMonth) { case 1: if((currentYear % 4 == 0 && currentYear % 100 != 0) || currentYear % 400 == 0) { daysInMonth = 29; } else { daysInMonth = 28; } break; case 3: case 5: case 8: case 10: daysInMonth = 30; break; default: daysInMonth = 31; } function calendar() { var container = document.getElementById("calendar"); var table = document.createElement("table"); for(var i = 0; i < daysInMonth/7; i++) { var row = document.createElement("tr"); for(var j = 0; j < 7; j++) { var cell = document.createElement("td"); var day = i * 7 + j + 1; if(day <= daysInMonth) { cell.innerHTML = day; } row.appendChild(cell); } table.appendChild(row); } container.appendChild(table); } calendar(); </script> </body> </html> ``` 这样,一个简单的JS星期日历就完成了。运行该代码,即可在网页上显示出一个以当前月份为基础的日历表格。 ### 回答3: 要手一个星期日历,可以使用JS以下代码: ```javascript // 获取当前日期 var today = new Date(); var year = today.getFullYear(); var month = today.getMonth() + 1; var day = today.getDate(); // 获取本月的第一天和最后一天的日期 var firstDay = new Date(year, month - 1, 1); // 注意月份要减1 var lastDay = new Date(year, month, 0); // 获取上个月的最后一天即本月的最后一天 // 获取本月的天数和第一天是星期几 var numDays = lastDay.getDate(); var firstWeekday = firstDay.getDay(); // 定义一个用于存储星期的数组 var weekDays = ["日", "一", "二", "三", "四", "五", "六"]; // 打印日历头部 console.log(year + "年" + month + "月"); console.log("日 一 二 三 四 五 六"); // 打印空白占位符 for (var i = 0; i < firstWeekday; i++) { process.stdout.write(" "); } // 打印日期 for (var j = 1; j <= numDays; j++) { process.stdout.write((j < 10 ? " " : "") + j + " "); if ((firstWeekday + j) % 7 === 0) { // 每行结束换行 console.log(); } } ``` 这段代码首先获取当前日期,然后计算本月的第一天和最后一天的日期,以及本月的天数和第一天是星期几。然后使用一个存储星期的数组,打印日历头部和星期的标题。 接着打印空白占位符,保证第一天之前的日期没有显示。然后利用循环打印日期,如果每行的日期数达到7个就换行。最后得到一个简单的星期日历输出。 注意:以上代码只是一个简单的示例,可能在细节上还有待完善,比如排版、颜色等。如果需求更复杂,可以根据实际需求进行相应的修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值