JS实现日历表

news2024/9/27 21:29:42

有需要的可以用一下,这是一个简单的demo.

HTML:

<table>
			<thead>
				<tr>
					<th colspan="2">
						<span class="left">«</span>
					</th>
					<th colspan="3">
						<span class="time"></span>
					</th>
					<th colspan="2"><span class="right">»</span>
					</th>
				</tr>
				<tr>
					<th>日</th>
					<th>一</th>
					<th>二</th>
					<th>三</th>
					<th>四</th>
					<th>五</th>
					<th>六</th>
				</tr>
			</thead>
			<tbody class="main">
			</tbody>
		</table>

CSS:

<style>
			table {
				width: 320px;
				background: #ffffff;
				color: #000000;
			}

			td,
			th {
				text-align: center;
				height: 30px;
			}
		</style>

JS:

<script>
			var oTime = document.querySelector(".time") //头部年月标题显示
			var oMain = document.querySelector(".main") //主体日历数字显示
			var leftBtn = document.querySelector(".left"); //点击左边的按钮,月份减少
			var rightBtn = document.querySelector(".right"); //点击右边的按钮,月份增加
			var time = new Date(); //获取当前系统时间
			leftBtn.onclick = function() {
				time.setMonth(time.getMonth() - 1);
				getPrevDays(time);
				getCurrentDays(time);
				minHead(time);
				mainList(time, getPrevDays(time), getCurrentDays(time));
			}
			rightBtn.onclick = function() {
				time.setMonth(time.getMonth() + 1);
				getPrevDays(time);
				getCurrentDays(time);
				minHead(time);
				mainList(time, getPrevDays(time), getCurrentDays(time));
			}

			function minHead(time) {
				oTime.innerText = time.getFullYear() + "年" + (time.getMonth() + 1) + "月"
			}

			function mainList(time, prevDays, currentDays) {
				var beforeCount = prevDays.length + currentDays.length;
				var cellList = document.querySelectorAll("td");
				for (var i = 0; i < prevDays.length; i++) { //上一个月所占格子
					cellList[i].innerHTML = "<font color='#D3D5DA'>" + prevDays[i] + "</font>"
				}
				for (var i = 0; i < currentDays.length; i++) { //当前月所占格子
					if (currentDays[i] == time.getDate()) { //当天日期高亮显示
						cellList[i + prevDays.length].innerHTML = "<font color='blue'>" + currentDays[i] + "</font>";
					} else { //当月日期白色突出
						cellList[i + prevDays.length].innerHTML = "<font color='#000000'>" + currentDays[i] + "</font>";
					}
				}
				for (var i = 1; i <= (42 - beforeCount); i++) { //下个月所占格子
					cellList[i + beforeCount - 1].innerHTML = "<font color='#D3D5DA'>" + i + "</font>"
				}
			}

			function createCells() {
				for (var i = 0; i < 6; i++) { //6行
					var oTr = document.createElement("tr");
					for (var j = 0; j < 7; j++) { //7列
						var oTd = document.createElement("td");
						oTr.appendChild(oTd);
					}
					oMain.appendChild(oTr);
				}
			}

			function getPrevDays(time) { //获得上一个在本月所占的天数
				var time = new Date(time); //拷贝一份时间,避免时间修改发生冲突
				var list = []; //上一个月所占的天数
				time.setDate(1); //设置成当月1号,便于查看是星期几;
				var day = time.getDay() == 0 ? 7 : time.getDay(); //如果是0,说明数字第一行需要空出来放上一个月的时间
				//获取上一个月的天数
				time.setDate(0); //系统自动计算到上一个月的最后一天
				var maxDay = time.getDate(); //得到上一个月的最后一天时间
				for (var i = maxDay; i > (maxDay - day); i--) {
					//根据maxDay和day之间的关系,把上一个月的时间放到list中
					list.push(i);
				}
				list.reverse(); //日期升序排列
				return list;
			}

			function getCurrentDays(time) { //获取当前月的天数
				var time = new Date(time); //拷贝时间,原因同上
				time.setDate(1); //确保不会出现跨越现象  如果当前时间是1月31号就会出现跨越到三月份的事情
				var list = [];
				//下面代码是为了获取上一个月的天数
				time.setMonth(time.getMonth() + 1) //修改时间到下一个月
				time.setDate(0); //修改时间日期是0
				var maxDay = time.getDate();
				//获取到上一个月的日期并放到数组中
				for (var i = 1; i <= maxDay; i++) {
					list.push(i);
				}
				return list;
			}
			createCells(); //创建6行7列表格
			getPrevDays(time); //获取上一个月在当前月所占的格子数
			getCurrentDays(time); //获取当前月所占的格子数
			minHead(time); //显示头部标题
			mainList(time, getPrevDays(time), getCurrentDays(time)); //显示主题日历
		</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

积木艺术化佳乐专用五万颗花型艺术积木诠释东方之美

12月11日,为期四天以“惊喜AMAZE”为主题的2023广州设计周圆满落幕!KALOS BLOCKS佳乐专凭借优秀的产品设计与场馆设计,开展四天,流量爆棚,圈粉无数,在设计周展馆中C位出道,获得现场观众和众多设计师的一致好评! 以梅花之形,现东方之美—— 一次唤醒艺术升维的仪式感一次东方美学…

【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第九讲-时间序列分析&#xff08;含Matlab代码&#xff09; 基本概念确定性时间序列分析方法平稳时间序列模型ARIMA模型季节性序列 习题8.11. 题目要求2.解题过程3.程序4.结果 习题8.21. 题目要求2.解题过程3.程序4.结果 习…

Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者力作/性能凶残/超级跨平台

一、前言 最近一个月一直在研究mdk-sdk音视频组件&#xff0c;这个组件是原qtav作者的最新力作&#xff0c;提供了各种各样的示例demo&#xff0c;不仅限于支持C&#xff0c;其他各种比如java/flutter/web/android等全部支持&#xff0c;性能上也是杠杠的&#xff0c;目前大概…

数字图像处理(实践篇)二十五 使用hyperlpr3进行车牌识别

目录 1 HyperLPR 2 中文字体文件下载 3 实践 1 HyperLPR HyperLPR是一个基于Python的使用深度学习针对对中文车牌识别的实现,与开源的EasyPR相比,它的检测速度和鲁棒性和多场景的适应性都要好于EasyPR。 HyperLPR3是一个高性能开源中文车牌识别框架。

leetcode-138-随机链表的复制(Java实现)

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点…

【Netty】Socket与I/O模型

目录 Socket网络编程Socket概述Socket整体流程代码实现 I/O模型说明BIO(同步并阻塞)NIO(同步非阻塞)AIO(异步非阻塞)BIO、NIO、AIO适用场景 Socket网络编程 Socket概述 Socket&#xff0c;套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议&#xff0c;主要解决…

免费分享一套Springboot+Vue前后端分离的校园二手交易平台,挺漂亮的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue前后端分离的校园二手交易平台&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue校园二手交易平台系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili 项目介绍 校园二手交易网站是一…

100V耐压 内置MOS ESOP8 40V输入 转5V 2.1A恒压输出

100V耐压内置MOS ESOP8 40V输入转5V 2.1A恒压输出 芯片测试数据如下图&#xff1a;

C#中简单的继承和多态

今天我们来聊一聊继承&#xff0c;说实话今天也是我第一次接触。 继承的概念是什么呢&#xff1f;就是一个类可以继承另一个类的属性和方法&#xff08;成员&#xff09; 继承是面向对象编程中的一个非常重要的特性。 好了&#xff0c;废话不多说&#xff0c;下面切入正题&a…

@SpringBootApplication自动配置原理剖析

SpringBootApplication自动配置原理剖析 自动配置: 根据我们添加的依赖,会自动将一些配置类的bean注册进ioc容器中,可以使用Autowired或者Resource等注解来使用它。 1.1 SpringBootApplication Spring Boot项目创建完成会默认生成一个Application的入口类(启动类),命名规则a…

推荐一些跨平台的比较优秀的翻译服务(软件或平台)

因为编程及查阅资料需要频繁的查阅英文&#xff0c;推荐一些跨平台的比较优秀的翻译服务&#xff08;软件或平台&#xff09; 1、DeepL Translate (https://www.deepl.com/translator) 这是一款基于机器翻译的在线翻译软件。win、安卓、Linux、IOS上都有可用的版本也可以基于w…

Android12编译kernel4.9解决:scripts/gcc-wrapper.py, line 79, in run_gcc(一百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

从池化的角度看GNN(包含PR-GNN,EdgePool等7篇论文)上篇

从池化的角度看GNN&#xff08;包含PR-GNN&#xff0c;EdgePool等7篇论文&#xff09; 前言一些总结一些早期论文的简要介绍1️⃣论文PR-GNN&#xff1a;《Pooling Regularized Graph Neural Network for fMRI Biomarker Analysis》 下一篇章笔记链接 前言 这里是早期的笔记&a…

MySQL 系列:注意 ORDER 和 LIMIT 联合使用的陷阱

文章目录 前言背后的原因ORDER BY 排序列存在相同值时返回顺序是不固定的LIMIT 和 ORDER BY 联合使用时的行为ORDER BY 或 GROUP BY 和 LIMIT 联合使用优化器默认使用有序索引 如何解决其它说明个人简介 前言 不知道大家在在分页查询中有没有遇到过这个问题&#xff0c;分页查…

pytorch之优化器、学习率函数学习

1、TORCH.OPTIM torch.optim是一个实现各种优化算法的包。大多数常用的方法都已经支持&#xff0c;并且接口足够通用&#xff0c;因此将来也可以轻松集成更复杂的方法 1、如何使用优化器 要使用&#xff0c;torch.optim您必须构造一个优化器对象&#xff0c;该对象将保存当前…

立创EDA把三个单独的PCB合并成一个文件

[TOC](立创EDA把三个单独的PCB合并成一个文件 1.具体操作 1.具体操作 参考&#xff1a;立创社区 先选中PCB CTRLSHIFTC, CTRLSHIFTV** **

uniapp交互反馈api的使用示例

官方文档链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 1.uni.showToast({}) 显示消息提示框。 常用属性&#xff1a; title:页面提示的内容 image&#xff1a;改变提示框默认的icon图标 duration&#xff1a;提示框在页面显示多少秒才让它消失 添加了image属性后。 注…

PHP之添加文字水印,两端文字分别设置不同的样式,支持透明度

/*** 给图片添加文字水印 可控制字体颜色透明度&#xff0c;默认是居中* param string $imagePath 图片地址* param string $outputPath 新图片地址 默认使用$imgurl* param string $textArray 水印文字* param int $fontSize 字体大小* param string $fontPath 字体文件路径* …

Python爬虫实战-采集微博评论,看看大家都在讨论什么

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名…