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

用原生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. [业界方案] Yarn的业界解决方案和未来方向

    [业界方案] Yarn的业界解决方案和未来方向 目录 [业界方案] Yarn的业界解决方案和未来方向 0x00 摘要 0x01 Yarn 1.1 参考文章 0x02 分析 2.1 综述 2.1.1 y ...

  2. Q: 如何实现右键选择打开文件的应用程序

    1.win+R打开cmd窗口,输入regedit,打开注册表 2.依次找到HKEY_CLASSESS_ROOT->*->Shell,下面新建项 "用notepad打开" ...

  3. Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析 题解 [ 绿 ] [ 带权并查集 ]

    原题 分析 本题由于从一个节点发信息,同一个集合内的所有点都会收到信息,显然是一道要求维护各节点间关系的题,因此采用并查集的数据结构进行求解. 但由于维护关系的同时还要维护权值,所以采用带权并查集,它 ...

  4. RFID基础——高频RFID协议、读写模块和标签

    RFID技术中的低频.高频.超高频有各自的优点和应用场景.其中,与我们个人生活息息相关的门禁卡.公交卡.身份证.图书标签主要用到的是高频RFID.这些应用也对应着高频RFID中不同的协议. 高频RFI ...

  5. [国家集训队] Tree2 题解

    加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题. 时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了 ...

  6. Android:如何在后台启动Activity

    通常我用这段代码开始一个活动: Intent i = new Intent(context, MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NE ...

  7. Bean的原始版本与最终版本不一致?记一次Spring IOC探索之旅

    前言 在这个信息技术发展迅速的时代,万万没想到,Spring自2003年发展至今,仍是技术选型中的首选,某些项目甚至有Spring全家桶的情况. 在Java开发者面试当中,Spring的原理也常被面试 ...

  8. Typecho 从零开始搭建个人博客详细教程

    搭建Typecho个人博客需要进行一些准备工作.以下是大致的教学步骤: 1. 准备工作:    - 一台支持PHP和MySQL的服务器,可以是虚拟主机或者自己搭建的服务器.    - 一个域名,用于访 ...

  9. 批量上传序列到Gisaid数据库

    本文演示的是用Gisaid官网自带的Excel宏批量上传毒株信息和序列到Gisaid数据库,需要魔法. 1. 下载GISAID Batch Uploader 找到自己需要上传的病毒类型,我是Flu,在 ...

  10. Linux - crontab 详解

    linux 系统由(crond)这个系统服务来控制的,crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,Linux 系统也提供了使用者控制计划任务的命令:cron ...