----------------

用原生JavaScript实现的一个日历小工具,开箱即用,可用于做签到记录、日程等显示控件,具体自己发挥啦

效果如下图,可以自行美化

 >>点击体验<<

<div id="signinRecord" class="">err</div>

<style>
.selectedDate{
border-radius: 50%;
border:solid rgb(123, 155, 226) 1px;
}
#signinRecord table td{
padding: 2px;
text-align: center;
}
</style> <script> var ajaxData = '[{"id":1,"userid":41,"signintime":"2019-04-22 07:48:53"},{"id":10,"userid":41,"signintime":"2019-04-23 14:45:18"},{"id":11,"userid":41,"signintime":"2019-04-24 11:02:56"}]'; /**
* 一个原生JavaScript写的日历小工具
* @outhor l-jirong@qq.com
*/ //获取当月的天数
function _getCountDays(date,month){
var date = new Date(date);
date.setMonth(month);
date.setDate(0); return date.getDate(0);
} //月份加减
function _monthAddOrSub(_date,type){
var date = new Date(_date);
var month = date.getMonth()+1;
var year = date.getFullYear();
if(type == 'addition'){
if((month+1) == 13){
month = 1;
year = year+1;
}else{
month++;
}
}else if(type == 'subtraction'){
if((month-1) == 0){
month = 12;
year = year-1;
}else{
month--;
}
}
return year+"-"+month; } /**
*
* @param {[array]} data [请求到的数据]
* @param {[date string]} _calendarMonth [可忽略]
* @return {[type]} []
*/
function _buildCalendar(data,_calendarMonth){
var date = data.length>0?new Date(data[0].signintime):(new Date(_calendarMonth));
var month = (date.getMonth()+1);
var firstDate = date.getFullYear()+"-"+month+"-"+1;
var countdays = _getCountDays(date,month);
var signedIn = Array();
var firstDay = (new Date(firstDate)).getDay();
var signedInTarget = ""; var html = "<div class='name'>签到记录:&nbsp;&nbsp;本月已签到"+data.length+"天</div>";
html += "<table><tr>";
html += " <td colspan=4 id='calendarMonth'>"+date.getFullYear()+"-"+month+"</td><td class='changeMonthBtn' id='preMonth'>上月</td><td class='changeMonthBtn' id='nextMonth'>下月</td></tr><tr>";
html += " <td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr><tr>"; //数据里的日期添加标记,不需要可以删除
for(var i=0;i<data.length;i++){
signedIn.push((new Date(data[i].signintime)).getDate());
} for(var d=1;d<=(countdays+firstDay);d++){
if((signedIn.indexOf(d-firstDay))!=-1){
signedInTarget = "class='selectedDate'";
}else{
signedInTarget = "";
} if(d<=(firstDay)){
html += "<td></td>";
}else if(d%7==0){
html += "<td "+signedInTarget+">"+(d-firstDay)+"</td></tr><tr>";
}else{
html += "<td "+signedInTarget+">"+(d-firstDay)+"</td>";
} } html += "</table>";
document.querySelector("#signinRecord").innerHTML=html; //切换签到记录月份
var changeMonthBtn = document.getElementsByClassName("changeMonthBtn");
for(var b=0;b<changeMonthBtn.length;b++){
changeMonthBtn[b].onclick = function(){
var calendarMonth = document.querySelector("#calendarMonth");
var cmDate = new Date(calendarMonth.innerText);
var cYear = cmDate.getFullYear();
var cMonth = cmDate.getMonth()+1;
var startTime,endTime; startTime = cYear+"-"+cMonth;
endTime = cYear+"-"+cMonth; if(this.id == 'preMonth'){
startTime = _monthAddOrSub(startTime,'subtraction');
}else if(this.id == 'nextMonth'){
startTime = _monthAddOrSub(startTime,'addition');
endTime = _monthAddOrSub(endTime,'addition');
endTime = _monthAddOrSub(endTime,'addition');
} if((new Date(startTime))>(new Date())){
alert((new Date(startTime).getMonth()+1)+'月还没到!');
return false;
}
calendarMonth.innerText = startTime;
//ajax request ···
ajaxData = new Array();
_buildCalendar(ajaxData,calendarMonth.innerText);
};
} } _buildCalendar(JSON.parse(ajaxData));
</script>

一个用原生JavaScript实现的日历小工具,开箱即用的更多相关文章

  1. 一个基于原生JavaScript开发的、轻量的验证码生成插件

    Vcode.js 一个基于原生JavaScript开发的.轻量的验证码生成插件 V: 1.0.0 DEMO:https://jofunliang.github.io/Vcode.js/example. ...

  2. 一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具

    一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具 Intro DbTool 是一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具,原本 ...

  3. 介绍一个开源的在线管理SQLServer的小工具--SQLEntMan

    近来有许多人问起SQL在线管理的问题,遂将以前用过的一个开源SQL 在线管理工具修改了一下,并分享. 看下效果图: 原项目的地址:http://sourceforge.net/projects/asp ...

  4. ruby利用Zip Gem写一个简单的压缩和解压的小工具

    在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合K ...

  5. 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表

    提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...

  6. spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

    项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...

  7. 【游戏开发】Excel表格批量转换成CSV的小工具

    一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...

  8. 这些小工具让你的Android 开发更高效

    在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...

  9. 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发

    准备工作 腾讯云服务器(Ubuntu),C++编程语言 由于想输出界面中包含中文,所以安装库 libncursesw5,依次输入下面三行命令 sudo apt-get install libncurs ...

  10. javascript学习-原生javascript的小特效(原生javascript实现链式运动)

    以下代码就不详细解析了,在我之前的多个运动效果中已经解析好多次了,重复的地方这里就不说明了,有兴趣的童鞋可以去看看之前的文章<原生javascript的小特效> <!DOCTYPE ...

随机推荐

  1. oracle 根据排序去重取第一条

    原文转自 https://www.jianshu.com/p/d5c0a355890b,感谢作者styone分享. SELECT t.* FROM (SELECT a.*, row_number ( ...

  2. hibernate基础查询语句使用

    hibernate最新文档 项目仓库地址项目201102-hibernateSelect 数据准备 -- 创建数据表 drop table if exists t_book; create table ...

  3. 从“技术宅”到"机器人教父",那个用机器人改变世界的年轻人

    写在前面 随着民营企业座谈会的召开,有一位年轻的企业家王兴兴映入了我们的视野.没错就是那个让机器人从实验室走向舞台中央的年轻人. 大家对今年春晚的机器人扭秧歌应该都还印象深刻吧,它就出自于王兴兴创办的 ...

  4. 使用Node.js对接StockTV全球金融市场数据API

    使用Node.js对接StockTV全球金融市场数据API 摘要:本文详细介绍了如何通过Node.js客户端库快速接入StockTV全球金融市场数据API,涵盖股票.外汇.期货和加密货币的实时行情获取 ...

  5. Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露

    一:背景 1. 讲故事 前面跟大家分享过一篇 C# 调用 C代码引发非托管内存泄露 的文章,这是一个故意引发的正向泄露,这一篇我们从逆向的角度去洞察引发泄露的祸根代码,这东西如果在 windows 上 ...

  6. 自己写的第一个java项目!

    项目名为"零钱通" 细节参考 [零基础 快速学Java]韩顺平 零基础30天学会Java 基本版: 1 package project; 2 3 import java.text. ...

  7. linux ubuntu mysql 默认密码

    前言 linux ubuntu安装mysql Ubuntu 安装 MySQL 后,在 /etc/mysql 目录下有个 debian.cnf,这里存储着默认的密码. [client] host = l ...

  8. NumPy学习7

    今天学习了: 13, NumPy字符串处理函数 14, NumPy数学函数 15, NumPy算术运算 numpy_test7.py : import numpy as np ''' 13, NumP ...

  9. 数据、信息、知识、智慧:AI时代我们该如何思考?

    时代的浪潮滚滚向前,AI技术的演进正悄然改变着我们认知世界和创造价值的方式.从数据.信息到知识.智慧,从大数据到大模型,从单一智能体到多智能体协作,这是一场深刻的认知革命,也是生产力解放的新纪元. A ...

  10. SSH远程神器—Termius

    简介 Termius是一款非常好用而且漂亮的SSH客户端,能快速远程控制服务器,可以定制自己喜欢的主题.Termius不仅涵盖了PC端的Windows.Linux.Mac,还支持手机端的Android ...