js控制台输出日历
html5设计
首先做一个前端页面,页面放入三个输入框和一个按钮,给按钮绑定单击事件,之后的js部分都在此事件中完成:
<input type="text" name="year" id="Year">年
<input type="text" name="month" id="month">月
<input type="text" name="day" id="day">日
<button onclick="jisuan()">查询</button>
id名可设置可不设置
css样式随意设置
js设计
先从前端页面获取年、月、日的值,此时获取的值是String类型的,虽然在js中String类型也能计算,但此时我们最好还是将其转为Number类型
var y = Number(document.getElementById('Year').value);
var mon = Number(document.getElementById('month').value);
var d = Number(document.getElementById('day').value);
console.log(y+'年'+mon+'月'+d+'日');
信息:1900年1月1日是周一
然后计算得出输入的年月日是从1900年1月1日往后开始计算的第几天,得出总天数后,将天数余上7,余数就是输入的日期是星期几。
关于总天数的计算
这里涉及到闰年和非闰年天数不一样的情况,闰年366天,非闰年365天,关于闰年的判断就不用多说了吧,都老生常谈了。
先取得1900年到输入年份前一年年底的的总天数,再算出输入日期时输入年的第几天,两者相加就是最终的总天数
var m = 0;
var n = 0;
for (var i = 1900; i< y; i++){
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
// console.log(i+"是闰年")
m+=1;
}else{
// console.log( i+'不是闰年')
n+=1;
}
}
console.log(m*366+n*365);
再算出输入日期时输入年的第几天,这里我用的方法比较憨哈,这里可以将2月份的情况放在最后讨论,这样就可以少写下面12个case或者使用循环解决(这个有人指点,我还没去想),大家自己看看吧!总之最最后得出了总天数。
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
// console.log("是闰年"+y)
switch (mon-1) {
case 1:
count = 31;
break;
case 2:{
count = 31+29;
break;
}
case 3:
count = 31+29+31;
break;
case 4:
count = 31+29+31+30;
break;
case 5:
count = 31+29+31+30+31;
break;
case 6:
count = 31+29+31+30+31+30;
break;
case 7:
count = 31+29+31+30+31+30+31;
break;
case 8:
count = 31+29+31+30+31+30+31+31;
break;
case 9:
count = 31+29+31+30+31+30+31+31+30;
break;
case 10:
count = 31+29+31+30+31+30+31+31+30+31;
break;
case 11:
count = 31+29+31+30+31+30+31+31+30+31+30;
break;
}
}else{
// console.log('不是闰年'+ y)
switch (mon-1) {
case 1:
count = 31;
break;
case 2:{
count = 31+28;
break;
}
case 3:
count = 31+28+31;
break;
case 4:
count = 31+28+31+30;
break;
case 5:
count = 31+28+31+30+31;
break;
case 6:
count = 31+28+31+30+31+30;
break;
case 7:
count = 31+28+31+30+31+30+31;
break;
case 8:
count = 31+28+31+30+31+30+31+31;
break;
case 9:
count = 31+28+31+30+31+30+31+31+30;
break;
case 10:
count = 31+28+31+30+31+30+31+31+30+31;
break;
case 11:
count = 31+28+31+30+31+30+31+31+30+31+30;
break;
}
}
// console.log('第一个'+count);
count = count + d;
console.log(count);
var sum = count + m*366+n*365;
console.log(sum);
console.log('1900年1月1日到'+y+'年'+mon+'月'+d+'日有'+sum+'天');
算出当前日期星期几,就能知道本月1日星期几
var yihao = (sum-d+1)%7;
console.log(mon+'月1日星期'+ yihao);
for (var i = 1; i < yihao; i++) {
console.log('*')
}
for (var i = 1;i<= mds;i++) {
console.log(i);
}
知道本月1日星期几,就能知道日历上1日前空多少格,类似上面算日期是输入年的第几天的法子,能得出当前月有多少天,就能在控制台“画”出日历