每天一个JS 小demo之日历制作。主要知识点:日期函数和对于函数封装的灵活运用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
td {
text-align: center;
}
</style>
</head>

<body>

<p>
<select id="yearSelect"></select>
<select id="monthSelect"></select>

<strong></strong>
</p>

<table id="tab" width="100%" border="1">
<thead>
<tr>
<th>日</th>
<th>一</th>
<th>二</th>
<th>三</th>
<th>四</th>
<th>五</th>
<th>六</th>
</tr>
</thead>
<tbody></tbody>
</table>

<script>
/*
* 获取指定年月份的日期总天数
* 显示的月份的第一天是星期几?
* */

var yearSelectElement = document.querySelector(‘#yearSelect‘);
var monthSelectElement = document.querySelector(‘#monthSelect‘);
var tbody = document.querySelector(‘tbody‘);
var strongElement = document.querySelector(‘strong‘);

var nowDate = new Date();

/*
* 动态生成option
* */
var html = ‘‘;
for (var i=1970; i<2100; i++) {
if (i == nowDate.getFullYear()) {
html = ‘<option selected>‘+ i +‘</option>‘ + html;
} else {
html = ‘<option>‘+ i +‘</option>‘ + html;
}

}
yearSelectElement.innerHTML = html;

var html = ‘‘;
for (var i=0; i<12; i++) {
if (i == nowDate.getMonth()) {
html += ‘<option value="‘+i+‘" selected>‘+ (i+1) +‘</option>‘;
} else {
html += ‘<option value="‘+i+‘">‘+ (i+1) +‘</option>‘;
}

}
monthSelectElement.innerHTML = html;

/*
* 默认显示当前年和月的日历
* */
calendar(nowDate.getFullYear(), nowDate.getMonth());

/*
* 根据选择的年和月重新生成日历
* */
yearSelectElement.onchange = monthSelectElement.onchange = function() {
calendar(yearSelectElement.value, monthSelectElement.value);
};

function calendar(year, month) {
year = Number(year);
month = Number(month);
strongElement.innerHTML = year + ‘年‘ + (month+1) + ‘月‘;

var html = ‘<tr>‘;
for (var i=1; i<=42; i++) {

if (i%7 == 1 && i != 1) {
html += ‘</tr><tr>‘;
}

var v = i- getFirstDay(year, month);

if (v < 1 || v > getDays(year, month)) {
html += ‘<td>&nbsp;</td>‘;
} else {
if (i % 7 == 1 || i % 7 == 0) {
html += ‘<td style="color: red">‘+ v +‘</td>‘;
} else if (
year == nowDate.getFullYear()
&&
month == nowDate.getMonth()
&&
v == nowDate.getDate()
) {
html += ‘<td style="background: red; color:white;">‘+ v +‘</td>‘;
} else {
html += ‘<td>‘+ v +‘</td>‘;
}
}

}
html += ‘</tr>‘;
tbody.innerHTML = html;
}

/*
* 获取指定显示年月份的日期总天数
* */
function getDays(y, m) {
return new Date(y, m+1, 1, -1, 0, 0).getDate();

/*
* 得到下一月的1日,-1时0分0秒的日期
* -1 : 其实就是前一天,表示就是上个月的最后一天的23时
* */
var date = new Date(y, m+1, 1, -1, 0, 0);
/*
* 上个月最后一天的日期其实就是上个月总的天数
* */
return date.getDate();
}

/*
* 获取指定显示的年月份的第一天是星期几
* */
function getFirstDay(y, m) {
return new Date(y, m, 1).getDay();
}
</script>
</body>
</html>

时间: 2024-12-24 16:30:30

每天一个JS 小demo之日历制作。主要知识点:日期函数和对于函数封装的灵活运用的相关文章

每天一个JS 小demo之韩雪冬轮播图。主要知识点:html,css布局,对于数组和对象的理解和运用

1 @charset "utf-8"; 2 /* CSS Document */ 3 4 * { padding: 0; margin: 0; } 5 li { list-style: none; } 6 img { border: none; } 7 body { background: #ececec; padding-top: 50px; } 8 9 #automatic { width: 970px; height: 344px; position: relative; mar

每天一个Js小demo之移动端全景图场景实现-全景装修图。主要知识点:css3,旋转角度检测

<!DOCTYPE html><html lang="en"><head><meta name="viewport" content="width=device-width,user-scalable=no" /><meta charset="UTF-8"><title>Document</title><style type="

每天一个JS 小demo之原生数组splice方法书写。主要知识点:锻炼思维逻辑能力,对于数组方法的理解和各种情况的考量

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head> <body><script>/** splice(start, deleteCount, data1, data2, data3...)* */ var arr = ['a', 'b'

每天一个JS 小demo之个人信息添加。主要知识点:DOM操作中的表格操作,节点操作

以下是简易效果: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> table { width: 555px; text-align: center; } table a { text-decora

每天一个JS 小demo之自定义滚动条。主要知识点:事件应用

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css">body { margin: 0;}#wrap { margin: 30px auto; position: relative; border: 1px s

每天一个JS 小demo之通过键盘方向键操作图片上下左右无缝切换。主要知识点:事件

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css">.wrap { margin: 150px auto; position: relative; width: 400px; height: 300px; o

每天一个JS 小demo之通过事件委托实现菜单展开及选中特效。主要知识点:事件

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css">body { margin: 0; background: #f1f1f1;}p { margin: 0;} #dorpDown { position: r

每天一个JS 小demo之表单排序。主要知识点:DOM中的表单操作,节点操作

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script type="text/javascript">window.onload = function(){ var input = document.querySelectorAll('inp

每天一个JS 小demo之邮件删除。主要知识点:事件应用

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title><style type="text/css">.wrap { width: 400px; margin: 30px auto;}ul { margin: 0; padding: 0; list-style: none;