万年历的实现

news/2025/1/31 9:23:12/

首先知道具体要实现的功能

实现选择不同年月,实现日历的效果

一.html代码

<div id="calendar"><div id="top"><!-- onchange事件,当用户改变input属性时,执行一段js代码 --><select id="year" onchange="hqx()"></select><span>年</span><select id="month" onchange="hqx()"></select><span>月</span></div></div><div id="table"><table id="tab" border="0" cellspacing="0" cellpadding=""><tr><th>周日</th><th>周一</th><th>周二</th><th>周三</th><th>周四</th><th>周五</th><th>周六</th></tr></table></div>

二.css代码,由于我自己的配色太烂,看着太丑了,我去搜索了配色表,然后配色,看着就比较好看

<style>select {width: 100px;height: 30px;}#calendar{width: 300px;height: 30px;margin: 0 auto;margin-bottom: 5px;}#table{width: 450px;margin: 0 auto;}tr {height: 50px;}th {width: 50px;text-align: center;line-height: 50px;border: 0;}tr>th:nth-child(1){background-color: #e4c2d1;}tr>th:nth-child(2){background-color: #bfa3ce;}tr>th:nth-child(3){background-color: #aca1cc;}tr>th:nth-child(4){background-color: #a17baf;}tr>th:nth-child(5){background-color: #894b94;}tr>th:nth-child(6){background-color: #e96da9;}tr>th:nth-child(7){background-color: #d93343;}tr>td{text-align: center;line-height: 50px;border: 0;}td:nth-child(1){background-color: #027766;}td:nth-child(2){background-color: #18907d;}td:nth-child(3){background-color: #178b9a;}td:nth-child(4){background-color: #77b2b8;}td:nth-child(5){background-color: #77b3b4;}td:nth-child(6){background-color: #c6e4ee;}td:nth-child(7){background-color: #d3e0d7;}</style>

三.具体功能实现

1.绑定年月日,遍历年份,并添加下拉表单

//绑定事件var tab = document.getElementById('tab') //表格var year = document.getElementById('year') //年份var month = document.getElementById('month') //月份window.onload = function () {//遍历年,添加option元素并赋值for (var i = 1970; i <= 2050; i++) {var sel = document.createElement('option'); //创建一个新的option元素sel.value = i; //添加年份sel.innerHTML = i; //显示在网页year.appendChild(sel); //添加新的sel节点//设置默认年份if(i==2021){sel.selected=true;}}//遍历月for (var i = 1; i <= 12; i++) {var sel = document.createElement('option'); //创建一个新的option元素sel.value = i; //添加年份sel.innerHTML = i; //显示在网页month.appendChild(sel); //添加新的sel节点// 设置默认月份if(i==8){sel.selected=true;}}hqx()}

2.1封装一个函数实现点击具体的年月,显示日历,在封装中我遇到了许多的问题其中最令我头疼的是我每点击一次不同的年月,都会生成一个新的日历,然后我不知道这个问题怎么处理,后来我知道了一个新的方法,try{ }catch(e){ }方法 异常捕获,在js代码出现错误的时候,可以吞掉错误,不执行它。下面就是这个方法在这里的使用

//try{}catch(e){}方法,当try里面的代码有错误,就不执行这些代码,执行catch里面的代码try {var dataa = document.getElementsByClassName("add1");//删除索引为0的add1 ,后面的补齐,避免重复输出的错误for (var i = 0; i < dataa.length;) { dataa[0].remove(); }} catch (e) {}

2.2具体实现代码

声明变量,生成新的节点,给节点添加类名

var week = 0; //周几var day = 1; //第一天var days = 30; //最后一天//注意年月后面都要加value,不然显示Invalid Date无效日期var date = new Date(year.value + '-' + month.value + '-1') //拼接时间var data = new Date(year.value, month.value, 0);//console.log(data);days = data.getDate(); //获得月份天数// console.log(days);//console.log( date.getDay());var newtr = document.createElement('tr'); //添加trnewtr.classList.add('add1'); //添加新的类名

2.3循环判定,第一天是周几,前面的输出空格,后面的输出日期一次加一

// 这个循环时添加空的td,先date.getDay()输出当前月份第一天是周几,然后在前面添加空格for (let i = 0; i < date.getDay(); i++) { //date.getDay()返回当前月份的星期几if (week == 7) { //判断是不是周天week = 0;}var newtd = document.createElement('td'); //定义newtd为创建新的td元素newtr.appendChild(newtd); //在tr下面添加空的tdweek++; //周++}//得到月份的第一天的周几,再来循环输出周1.2.3.....if (week <= 6) {for (; week <= 6; week++, day++) {var newtd = document.createElement("td"); //定义newtd为创建新的td元素newtd.innerText = day; //在页面输出天newtd.value = day; //给td的value赋值newtr.appendChild(newtd); //在tr下面添加td}}

2.4添加新的表格行,循环输出到月份的最后一天。这里我因为我添加了每一个格子的背景的颜色,所以最后一行还得补齐最后一个格子,不然影响美观

tab.appendChild(newtr); //给表格添加新的表格行week = 0; //从第一格开始newtr = document.createElement("tr"); //给表格添加新的表格行newtr.classList.add("add1"); //给表格行添加一个类名add1for (; day <= days; day++, week++) {if (week == 7) {week = 0;tab.appendChild(newtr); //当一行填满添加下一行newtr = document.createElement("tr");newtr.classList.add("add1");}var newtd = document.createElement("td"); //newtd.innerText = day; //在页面输出天newtd.value = day; //给td的value赋值newtr.appendChild(newtd); //添加td}tab.appendChild(newtr); //添加最后一行//补齐后面的空格子if (week <= 6) {for (; week <= 6; week++, day++) {var newtd = document.createElement("td"); //定义newtd为创建新的td元素newtr.appendChild(newtd); //在tr下面添加td}}


http://www.ppmy.cn/news/371157.html

相关文章

打印万年历

1.从键盘输入年份月份 Scanner input new Scanner(System.in);System.out.println("请输入年份: ");int year input.nextInt();//键盘输入年份Scanner inpt new Scanner(System.in);System.out.println("请输入月份: ");int month input.nextInt();//键…

万年历!(日历)

此万年历有三点功能 1.显示某一年的日历 2.显示某年中某个月的日历 3.显示某年某月某天是星期几 下面贴上蒟蒻的代码 #include <iostream> #include <iomanip> using namespace std; int key,year,month,day,xingqi,num[15]{0,31,28,31,30,31,30,31,31,30,31,30,31…

万年历代码

public class Demo03 { //获取每年首日周几 public static int kalendar(int year, int month) { Calendar calendar Calendar.getInstance(); calendar.set(year,0,1,0,0,0); Date date calendar.getTime(); long atYear date.getTime(); int weekday ((year - 1970)*365le…

免费软件 --- 国信证券帐户历史成交统计器

很早之前就想写这个软件&#xff0c;这2天花费了点时间写出来了&#xff0c;测试后就发布了。当然了&#xff0c;本软件只针对国信证券而开发的&#xff0c;只支持统计国信证券交易软件的记录。如果是其他券商开户的&#xff0c;请不要来下载了。 软件简要说明&#xff1a;本软…

android农历日历,万年历农历日历app

万年历农历日历app是为广大手机用户精心准备的一款手机日历应用软件&#xff0c;万年历农历日历app能为你提供最准确的农历时间&#xff0c;让你能够方便快捷的安排自己的事情&#xff0c;是一款功能十分强大的手机应用软件&#xff0c;有需要的朋友们欢迎前来下载使用&#xf…

【工具】万年日历

<script languagejscript> </script> .todyaColor {BACKGROUND-COLOR: aqua}本机时间: 国际换日线 萨摩亚 夏威夷 阿拉斯加 太平洋 美国山区 美加山区 加拿大中部 墨西哥 美加中部 南美洲太平洋 美加东部 美东 南美洲西部 大西洋 纽芬兰 东南美洲 南美洲东部 大西…

按月显示的万年历(含农历)网页代码

/*****************************************************************************按月显示的万年历&#xff08;含农历&#xff09;网页代码*****************************************************************************/<HTML><!-- saved from url(0041)http:/…

带农历的中国万年历制作

最近一个小项目需要制作带农历的中国万年历&#xff0c;苦闷了几天&#xff0c;终于大功告成&#xff0c;可以保存为图片&#xff0c;可以更换风格等&#xff0c;全用C# 和 GDI完成&#xff0c;为提高效率&#xff0c;全自行绘制&#xff0c;没有使用Label等控件。 上面的代码&…