一个js简单的日历显示效果的函数
用一个函数简单的实现一个月份的日历,效果如下:

这个日历效果有高亮显示,我实现的思维比较简单。
我把上面的日历效果用表格table生成,分成两个部分。
第一个部分:就是前面的第一排,我用一行<tr></tr>显示,这一部分表示的上个月份留下来的日期和这个月份的日期的混合日期;
第二部分:就是剩下的所有排,这里我用五行<tr></tr>显示,这一部分表示的是这个月份和下个月份的日期的混合日期。
这里为什么要用6行<tr></tr>来显示日历的效果呢?原因是有的月份跨越了6行,所以为了兼容所有的月份,只好用6行了。
下面是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>js的日历</title>
<meta name="keywords" content="关键字列表" />
<meta name="description" content="网页描述" />
<link rel="stylesheet" type="text/css" href="" />
<style type="text/css">
table tr td {
width:27px;
text-align:center;
}
</style>
<script type="text/javascript">
(function(){
//获取日历的函数,参数是年份year和月份Month,默认是今年当月的日历
function getcalendar(year,month){
year = year ? year : new Date().getFullYear();
//month是0开始到11结束的,获取当前月份必须加1
month = month ? month : new Date().getMonth()+1;
var last = new Date(year,month-1,0);
var lastdate = last.getDate();//获取上个月的最大日期
var lastday = last.getDay();//获取上个月最大日期的星期几
var months = new Date(year,month,0);
var Maxdate = months.getDate();//获取这个月最大的日期
//获取当前的日期,为的是高亮显示当前的日期
var today = new Date().getDate();
var thisyear = new Date().getFullYear();
var thismonth = new Date().getMonth()+1;
var str = '<table><tr style="font-size:21px;font-weight:bold;"><td id="dec">\<</td> <td colspan="5">'+year+'年'+month+'月</td><td id="add">\></td></tr><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>';
//获取上个月在这个月份中存在的最后日期
var remainlastdate = lastdate - lastday;
var t = 1;
str += '<tr>';
for(var g=0;g<=6;g++){
//星期是从0开始到6结束的,小于等于上个月最大星期的日期则是上个月的日期
if(g <= lastday){
str +='<td>'+ remainlastdate++ +'</td>';
}else{
//高亮显示当前日期
if(thisyear == year && thismonth == month && today == t){
str +='<td style="color:red;">'+ t++ +'</td>';
//假如不是当前月份则默认1为高亮日期
}else if((thisyear != year && t == 1) || (thismonth != month && t == 1)){
str +='<td style="color:red;">'+ t++ +'</td>';
}else{
//该月份的普通日期
str +='<td style="color:blue;">'+ t++ +'</td>';
}
}
}
str += '</tr>';
//除去上面的部分,这个月从哪里开始
var remainlastday = 6 - lastday + 1;
var nextMonthday = 1;//下一个月份的开始日期
//这里i最大值为5是为了兼容所有的月份,有的月份可能跨越6个tr
for(var i=1;i<=5;i++){
str += '<tr>';
for(var j=0;j<7;j++){
if(remainlastday <= Maxdate){
if(thisyear == year && thismonth == month && today == remainlastday){
str +='<td style="color:red;">'+ remainlastday++ +'</td>';
}else{
if((thisyear != year && remainlastday == 1) || (thismonth != month && remainlastday == 1)){
//剩下的天数从这里开始的话,默认的第一天还是为红色
str +='<td style="color:red;">'+ remainlastday++ +'</td>';
}else{
str +='<td style="color:blue;">'+ remainlastday++ +'</td>';
}
}
}else{
str +='<td>'+ nextMonthday++ +'</td>';
}
}
str += '</tr>';
}
str +='</table>';
return str;
}
return window.calendar=getcalendar;
})();
document.write(calendar(2018,1));
</script>
</head>
<body>
<div id='di'></div>
</body>
</html>
上面的函数简单的实现了日历,当然,要想让这个日历变得更强大,更有意思,你还得自己动手修改一下上面的函数。
有什么bug还望读者指出。
一个js简单的日历显示效果的函数的更多相关文章
- Epii.js 一个极其简单的Js模板引擎
Epii.js 简约而不简单的Js模板引擎 Epii.js 简约而不简单的JavaScript模板引擎 # 特性 一个轻量级模板引擎,可快速实现数据与ui绑定(数据变动,UI自动变动),快速实现事件绑 ...
- python爬虫的一个常见简单js反爬
python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成coo ...
- Node.js简单介绍并实现一个简单的Web MVC框架
编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...
- sChart.js:一个小型简单的图表库
介绍 sChart.js 作为一个小型简单的图表库,没有过多的图表类型,只包含了柱状图.折线图.饼状图和环形图四种基本的图表.麻雀虽小,五脏俱全.sChart.js 基本可以满足这四种图表的需求.而它 ...
- 一个不错的PHP二维数组排序函数简单易用存用
一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...
- djb2:一个产生简单的随机分布的哈希函数
目录 LCG算法 示例代码 djb2 示例代码 为什么选择参数33和 33 was chosen because: 5381 was chosen because 哈希选择参考 LCG算法 djb2与 ...
- 使用JAVA写一个简单的日历
JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...
- js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)
js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...
- Js文件函数中调用另一个Js文件函数的方法
在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...
随机推荐
- <转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY
MSDN对官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的“最后”的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值 ...
- react native TextInput
今天我想说一下react native中的一个控件,TextInput 翻译过来就是文本输入,对应着android中的EditText.我们先看一下官方是怎样描述的.TextInput是一个允许用户在 ...
- 使用Python解析JSON数据的基本方法
这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------- ...
- 【html+css】关于页面布局中遇到的问题记录
关于行内元素: 行内元素设置width无效, height无效(可以设置line-height), margin上下无效,padding上下无效,margin和padding可设置左右. text ...
- Codeforces Round #375 (Div. 2)
A. The New Year: Meeting Friends 水 #include <set> #include <map> #include <stack> ...
- 【Oracle】去除表中重复的数据
删除表重复数据 (t1表中有重复数据)1.使用distinct create table t2 as select * from t1;create table tmp_t2 as select di ...
- easyui tree loadFilter的使用
实例化.这里增加了三个属性,可以指定idFiled,textFiled和parentField.所以这里的simpleData可以不严格转换成tree的数据格式. $(function(){ $( ...
- H5移动APP开发 细节详解(转)
工作了有一段时间,基本上都在搞移动端的前端开发,工作的过程中遇到过很多问题,bug的解决方案,记录下来,以便后用!!!内容并不是很全,以后每遇到一个问题都会总结在这里,分享给大家! 一.meta标签相 ...
- 一些Asp.Net面试题答案
工作时间长了总是用同样的一些东西 其他的有些生疏 闲来看看面试题练习一下: 题目出处嘛...aspnet-tests-for-juniors 转载请注明来源:http://www.cnblogs ...
- java分享第七天-02(读取文件)
一 读取文件 public static void main(String[] args) throws FileNotFoundException, IOException { // 建立File对 ...