舞动的灵魂版js日历,完全采用js实现,故而实现了与语言无关,jsp、asp.net php asp均可使用.无论你是开发软件,还是网站,均是不可或缺的实用代码。
该日历主要实现了获取当前时间时分秒,年月日星期,动态生成选择年的select,月的select,然后根据你所选中的年月,显示该年月对应的这一个月的日期。
点击上一个月,下一个月按钮,在下拉列表中显示对应的年月。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>title</title>
<style>
#calendar {
position: absolute;
padding: 5px;
border: 1px solid #000000;
background: #8f3349;
display: none;
}
#todaytime {
padding: 5px 0;
font-size: 40px;
color: white;
}
#todaydate {
padding: 5px 0;
font-size: 24px;
color: #ffcf88;
}
#tools {
padding: 5px 0;
height: 30px;
color: white;
}
#tools .l {
float: left;
}
#tools .r {
float: right;
}
table {
width: 100%;
color: white;
}
table th {
color: #a2cbf3;
}
table td {
text-align: center;
cursor: default;
}
table td.today {
background: #cc2951;
color: white;
}
</style>
<script>
window.onload = function() {
var text1 = document.getelementbyid('text1');
text1.onfocus = function() {
calendar();
}
// calendar();
function calendar() {
var calendarelement = document.getelementbyid('calendar');
var todaytimeelement = document.getelementbyid('todaytime');
var todaydateelement = document.getelementbyid('todaydate');
var selectyearelement = document.getelementbyid('selectyear');
var selectmonthelement = document.getelementbyid('selectmonth');
var showtableelement = document.getelementbyid('showtable');
var prevmonthelement = document.getelementbyid('prevmonth');
var nextmonthelement = document.getelementbyid('nextmonth');
calendarelement.style.display = 'block';
/*
* 获取今天的时间
* */
var today = new date();
//设置日历显示的年月
var showyear = today.getfullyear();
var showmonth = today.getmonth();
//持续更新当前时间
updatetime();
//显示当前的年月日星期
todaydateelement.innerhtml = getdate(today);
//动态生成选择年的select
for (var i=1970; i<2020; i++) {
var option = document.createelement('option');
option.value = i;
option.innerhtml = i;
if ( i == showyear ) {
option.selected = true;
}
selectyearelement.appendchild(option);
}
//动态生成选择月的select
for (var i=1; i<13; i++) {
var option = document.createelement('option');
option.value = i - 1;
option.innerhtml = i;
if ( i == showmonth + 1 ) {
option.selected = true;
}
selectmonthelement.appendchild(option);
}
//初始化显示table
showtable();
//选择年
selectyearelement.onchange = function() {
showyear = this.value;
showtable();
showoption();
}
//选择月
selectmonthelement.onchange = function() {
showmonth = number(this.value);
showtable();
showoption();
}
//上一个月
prevmonthelement.onclick = function() {
showmonth--;
showtable();
showoption();
}
//下一个月
nextmonthelement.onclick = function() {
showmonth++;
showtable();
showoption();
}
/*
* 实时更新当前时间
* */
function updatetime() {
var timer = null;
//每个500毫秒获取当前的时间,并把当前的时间格式化显示到指定位置
var today = new date();
todaytimeelement.innerhtml = gettime(today);
timer = setinterval(function() {
var today = new date();
todaytimeelement.innerhtml = gettime(today);
}, 500);
}
function showtable() {
showtableelement.tbodies[0].innerhtml = '';
//根据当前需要显示的年和月来创建日历
//创建一个要显示的年月的下一个的日期对象
var date1 = new date(showyear, showmonth+1, 1, 0, 0, 0);
//对下一个月的1号0时0分0秒的时间 - 1得到要显示的年月的最后一天的时间
var date2 = new date(date1.gettime() - 1);
//得到要显示的年月的总天数
var showmonthdays = date2.getdate();
//获取要显示的年月的1日的星期,从0开始的星期
date2.setdate(1);
//showmonthweek表示这个月的1日的星期,也可以作为表格中前面空白的单元格的个数
var showmonthweek = date2.getday();
var cells = 7;
var rows = math.ceil( (showmonthdays + showmonthweek) / cells );
//通过上面计算出来的行和列生成表格
//没生成一行就生成7列
//行的循环
for ( var i=0; i<rows; i++ ) {
var tr = document.createelement('tr');
//列的循环
for ( var j=0; j<cells; j++ ) {
var td = document.createelement('td');
var v = i*cells + j - ( showmonthweek - 1 );
//根据这个月的日期控制显示的数字
//td.innerhtml = v;
if ( v > 0 && v <= showmonthdays ) {
//高亮显示今天的日期
if ( today.getfullyear() == showyear && today.getmonth() == showmonth && today.getdate() == v ) {
td.classname = 'today';
}
td.innerhtml = v;
} else {
td.innerhtml = '';
}
td.ondblclick = function() {
calendarelement.style.display = 'none';
text1.value = showyear + '年' + (showmonth+1) + '月' + this.innerhtml + '日';
}
tr.appendchild(td);
}
showtableelement.tbodies[0].appendchild(tr);
}
}
function showoption() {
var date = new date(showyear, showmonth);
var sy = date.getfullyear();
var sm = date.getmonth();
console.log(showyear, showmonth)
var options = selectyearelement.getelementsbytagname('option');
for (var i=0; i<options.length; i++) {
if ( options[i].value == sy ) {
options[i].selected = true;
}
}
var options = selectmonthelement.getelementsbytagname('option');
for (var i=0; i<options.length; i++) {
if ( options[i].value == sm ) {
options[i].selected = true;
}
}
}
}
/*
* 获取指定时间的时分秒
* */
function gettime(d) {
return [
addzero(d.gethours()),
addzero(d.getminutes()),
addzero(d.getseconds())
].join(':');
}
/*
* 获取指定时间的年月日和星期
* */
function getdate(d) {
return d.getfullyear() + '年'+ addzero(d.getmonth() + 1) +'月'+ addzero(d.getdate()) +'日 星期' + getweek(d.getday());
}
/*
* 给数字加前导0
* */
function addzero(v) {
if ( v < 10 ) {
return '0' + v;
} else {
return '' + v;
}
}
/*
* 把数字星期转换成汉字星期
* */
function getweek(n) {
return '日一二三四五六'.split('')[n];
}
}
</script>
</head>
<body>
<input type="text" id="text1">
<p id="calendar">
<p id="todaytime"></p>
<p id="todaydate"></p>
<p id="tools">
<p class="l">
<select id="selectyear"></select> 年
<select id="selectmonth"></select> 月
</p>
<p class="r">
<span id="prevmonth">∧</span>
<span id="nextmonth">∨</span>
</p>
</p>
<table id="showtable">
<thead>
<tr>
<th>日</th>
<th>一</th>
<th>二</th>
<th>三</th>
<th>四</th>
<th>五</th>
<th>六</th>
</tr>
</thead>
<tbody></tbody>
</table>
</p>
</body>
</html>
效果:
以上就是js仿window10系统日历效果的实现示例的详细内容。