这个日历界面不属于任何插件,纯粹用最基本的JS函数获取到每个位置对应的日期,然后再通过遍历拼接table表单的方式赋值到HTML里面进行展示,日历效果的显示,其中使用到的文件只需要一个Jquery的JS文件即可实现如下效果:

Demo只是一个简单的日历模板,没有太多函数和限制,开发人员可以基于自己的想法在里面任意更改

下列是JS代码:

<script type="text/javascript" src="js/jquery.js" ></script>
<script type="text/javascript">
$(function () {
//获取当前日期及其年月
var todate=new Date();
var year=todate.getFullYear();//当前年份
var month=todate.getMonth()+1;//当前月份
$("#tdtitle").html(year+"年"+month+"月");
//传入ID定义初始化方法
InitialMethod($("#tbTypesetting"), year, month, "trclass", 'tdclass');
});
//初始化方法
function InitialMethod(tabID, year, month, style, tdclass)
{
//获取月份的第一天
var MonthOne = new Date(year + '/' + month + '/01');
//获取第一天是星期几
var weekOne = MonthOne.getDay();
//几天前
var AgoDay = (weekOne) * (-1);
//当月最大日期的索引
var MaxDay = getCountDays(MonthOne)-1;
//当前日期
var today = getToday();
var strhtml;
var countNum = 0;
//6行 7列
for (var i = 0; i < 6; i++)
{
strhtml += "<tr class='" + style + "'>";
for (var j = 0; j < 7; j++)
{
var sum = AgoDay + countNum;
if (sum < 0 || sum > MaxDay)
{
strhtml += "<td class='" + tdclass + "' style='color:#cccccc;'>" + ReturnDay(sum,MonthOne) + "</td>";
}
else if (ReturnDay(sum,MonthOne) == today) {
strhtml += "<td class='" + tdclass + "' style='color:red;'>" + ReturnDay(sum,MonthOne) + "</td>";
}
else {
strhtml += "<td class='" + tdclass + "'>" + ReturnDay(sum,MonthOne) + "</td>";
}
countNum++;
}
strhtml+="</tr>";
}
tabID.html(strhtml);
} //几天前/后的日期
function ReturnDay(day,OneDate) {
var time = new Date(OneDate);
time.setDate(time.getDate() + day);//获取Day天后的日期
var y = time.getFullYear();
var m = time.getMonth() + 1;//获取当前月份的日期
var d = time.getDate();
return d;
} //当月有多少天
function getCountDays(time) {
var curDate = new Date(time);
/* 获取当前月份 */
var curMonth = curDate.getMonth();
/* 生成实际的月份: 由于curMonth会比实际月份小1, 故需加1 */
curDate.setMonth(curMonth + 1);
/* 将日期设置为0, 这里为什么要这样设置, 我不知道原因, 这是从网上学来的 */
curDate.setDate(0);
/* 返回当月的天数 */
return curDate.getDate();
}
//当前日期
function getToday()
{
var time = new Date();
var today = time.getDate();
return today;
}
</script>

HTML代码:

<body>
<div id="SlopeCheckContainer" style="text-align:center; margin:auto;">
<table id="concent" class="tableclass">
<tr class="trclass"><td class="tdclass" colspan="7" id="tdtitle">2019年8月</td></tr>
<tr style="height:5%">
<td class="tdclass">星期天</td>
<td class="tdclass">星期一</td>
<td class="tdclass">星期二</td>
<td class="tdclass">星期三</td>
<td class="tdclass">星期四</td>
<td class="tdclass">星期五</td>
<td class="tdclass">星期六</td>
</tr>
<tbody id="tbTypesetting"></tbody>
</table>
</div>
</body>

Demo的完整代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.tableclass
{
width:100%;
clear:both;
font-size: 12px;
border-right: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
border-collapse: collapse;
} .trclass
{
height:50px;
} .tdclass
{
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
background-color:#ffffff;
}
</style>
<script type="text/javascript" src="js/jquery.js" ></script>
<script type="text/javascript">
$(function () {
//获取当前日期及其年月
var todate=new Date();
var year=todate.getFullYear();//当前年份
var month=todate.getMonth()+1;//当前月份
$("#tdtitle").html(year+"年"+month+"月");
//传入ID定义初始化方法
InitialMethod($("#tbTypesetting"), year, month, "trclass", 'tdclass');
});
//初始化方法
function InitialMethod(tabID, year, month, style, tdclass)
{
//获取月份的第一天
var MonthOne = new Date(year + '/' + month + '/01');
//获取第一天是星期几
var weekOne = MonthOne.getDay();
//几天前
var AgoDay = (weekOne) * (-1);
//当月最大日期的索引
var MaxDay = getCountDays(MonthOne)-1;
//当前日期
var today = getToday();
var strhtml;
var countNum = 0;
//6行 7列
for (var i = 0; i < 6; i++)
{
strhtml += "<tr class='" + style + "'>";
for (var j = 0; j < 7; j++)
{
var sum = AgoDay + countNum;
if (sum < 0 || sum > MaxDay)
{
strhtml += "<td class='" + tdclass + "' style='color:#cccccc;'>" + ReturnDay(sum,MonthOne) + "</td>";
}
else if (ReturnDay(sum,MonthOne) == today) {
strhtml += "<td class='" + tdclass + "' style='color:red;'>" + ReturnDay(sum,MonthOne) + "</td>";
}
else {
strhtml += "<td class='" + tdclass + "'>" + ReturnDay(sum,MonthOne) + "</td>";
}
countNum++;
}
strhtml+="</tr>";
}
tabID.html(strhtml);
} //几天前/后的日期
function ReturnDay(day,OneDate) {
var time = new Date(OneDate);
time.setDate(time.getDate() + day);//获取Day天后的日期
var y = time.getFullYear();
var m = time.getMonth() + 1;//获取当前月份的日期
var d = time.getDate();
return d;
} //当月有多少天
function getCountDays(time) {
var curDate = new Date(time);
/* 获取当前月份 */
var curMonth = curDate.getMonth();
/* 生成实际的月份: 由于curMonth会比实际月份小1, 故需加1 */
curDate.setMonth(curMonth + 1);
/* 将日期设置为0, 这里为什么要这样设置, 我不知道原因, 这是从网上学来的 */
curDate.setDate(0);
/* 返回当月的天数 */
return curDate.getDate();
}
//当前日期
function getToday()
{
var time = new Date();
var today = time.getDate();
return today;
}
</script>
</head>
<body>
<div id="SlopeCheckContainer" style="text-align:center; margin:auto;">
<table id="concent" class="tableclass">
<tr class="trclass"><td class="tdclass" colspan="7" id="tdtitle">2019年8月</td></tr>
<tr style="height:5%">
<td class="tdclass">星期天</td>
<td class="tdclass">星期一</td>
<td class="tdclass">星期二</td>
<td class="tdclass">星期三</td>
<td class="tdclass">星期四</td>
<td class="tdclass">星期五</td>
<td class="tdclass">星期六</td>
</tr>
<tbody id="tbTypesetting"></tbody>
</table>
</div>
</body>
</html>

JS自制极简日历Demo的更多相关文章

  1. 极简 Node.js 入门 - 3.2 文件读取

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  2. 极简 Node.js 入门 - 5.1 创建 HTTP 服务器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  3. 极简 Node.js 入门 - 5.3 静态资源服务器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  4. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  5. Snabbt.js – 极简的 JavaScript 动画库

    Snabbt.js 是一个简约的 JavaScript 动画库.它会平移,旋转,缩放,倾斜和调整你的元素.通过矩阵乘法运算,变换等可以任何你想要的方式进行组合.最终的结果通过 CSS3 变换矩阵设置. ...

  6. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。

    资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...

  7. weixinShare.js / 极简微信分享插件

    weixinShare.js / 极简微信分享插件 / 版本:0.1 这是一个很简单.很实用的微信分享插件,无需jQuery,只需要在网页里加入一行JS代码,即可自动识别微信浏览器并启动微信分享的提示 ...

  8. 原生JS轮播-各种效果的极简实现

    寒假持续摸鱼中~此为老早以前博客的重写,当时还是分开写的,这里汇总重写,正好复习一遍~ 春招我来了! 所有有意思的,一股脑先扔进收藏,然后再也不看哈哈,真是糟糕. 今日事,今日毕,说起来容易. 当时竟 ...

  9. js消除小游戏(极简版)

    js小游戏极简版 (1) 基础布局 <div class = "box"> <p></p> <div class="div&qu ...

  10. HTML5 极简的JS函数

    页面初始化 mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支持在mui.init方法中配置的功能包括:创建子页面.关闭 ...

随机推荐

  1. vue+vant项目中 rem适配配置

    vant rem适配,需要安装两个插件 postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem lib-flexible 用于设置 rem 基准值 postcss-px ...

  2. 2021-02-26:一个数组arr是二叉树的中序遍历结果,每条边的开销是父节点和子节点的乘积,总开销是所有边的开销之和。请问最小总开销是多少?

    2021-02-26:一个数组arr是二叉树的中序遍历结果,每条边的开销是父节点和子节点的乘积,总开销是所有边的开销之和.请问最小总开销是多少? 链接:https://www.nowcoder.com ...

  3. 开发者一定要知道的 API 管理五大趋势

    API First 大势所趋,APIaaS(API 作为服务)也将受到越来越多企业和组织的选择,研发团队对 API 研发管理工具的要求也水涨船高. API 在今天的数字化世界中扮演着至关重要的角色,随 ...

  4. 【GiraKoo】面向对象开发系列之【封装】

    [技术分享]面向对象开发系列之[封装] 理解 封装是面向对象程序开发的基石. 程序开发,最核心价值,是数据. 程序其实是读取数据,操作数据,保存数据等一系列操作. 那么经过良好组织过的数据,将使编程事 ...

  5. Experimental support for decorators is a feature that is subject to change in a future release. Set

    错误提示Experimental support for decorators is a feature that is subject to change in a future release. ...

  6. 专访泛境科技:如何借助3DCAT实时云渲染打造元宇宙解决方案

    随着5G.VR/AR等技术的发展,元宇宙(Metaverse)这一概念越来越受到关注.元宇宙是一个由虚拟世界构成的网络空间,其中人们可以通过数字化的身份和形象进行各种社交.娱乐.创作和商业活动.元宇宙 ...

  7. ZYNQ 启动过程简介 以及 ZYNQ 裸机生成BOOT.BIN

    背景 下图是ZYNQ的启动过程 上电复位等完成后,先执行BootRom,然后再根据MIO设定的启动方式选择对应从哪里启动,无论从哪里启动,都需要一个BOOT.BIN文件,对于裸机程序来说: BOOT. ...

  8. 【python基础】函数-模块

    函数的优点之一是,使用它们可将代码块与主程序分离.通过给函数指定函数名称,可让主程序容易理解的多.我们还可以更加细化,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中.import关键字作用 ...

  9. docker 对容器中的文件进行编辑

    用途 有一些情况下,例如docker安装的redis.nacos.mysql等等,在docker容器中的安装未进行文件的映射,当需要对其进行更改配置信息时,就会遇到这种情况,需要去容器中进行编辑配置文 ...

  10. VS2017登录账户提示升级Edge浏览器的问题

    在win7系统登录VS2017账号总是提示要升级浏览器的问题,这里给大家提供一个解决办法,也是困扰我很久的问题.遇到这中问题,我们可以在VS工具->选项->账户,然后勾选在添加账户或对账户 ...