输入三个数 分别是 年份 月份 以及按星期几开始排列(星期日是0 其他依次为1 2 3 4 5 6)
输出两个数 第一个表示该年月分 第一天在排列中是第几列
第二个数 表示该年月份 最后一天在排列中是 第几列
代码如下
<!DOCTYPE html>
<html>
<head>
<title>日期的小尝试</title>
<meta charset="utf-8">
<script>
// 获得一个指定时间的 Date对象 默认为2018年 1月
function getNewDate(oYear = 2018, oMonth = 0){
return new Date(oYear, oMonth-1);
}
// 判断是否为闰年
function isLun(oYear){
return (oYear%4 == 0 && oYear%100 !=0) || oYear%400 ==0;
}
// 获得一个月份 有多少天
function getNumberDay(oYear, oMonth){
// 判断是否为闰年
var flag = isLun(oYear);
var days = 31;
switch(oMonth-1){
case 0: days = 31; break;
case 1: days = flag ? 29 : 28; break;
case 2: days = 31; break;
case 3: days = 30; break;
case 4: days = 31; break;
case 5: days = 30; break;
case 6: days = 31; break;
case 7: days = 31; break;
case 8: days = 30; break;
case 9: days = 31; break;
case 10: days = 30; break;
case 11: days = 31; break;
default: days = 31;
}
return days;
}
window.onload = function(){
var oBut = document.getElementById('but');
oBut.addEventListener('click', function(){
var oYear = parseInt(document.getElementById('year').value);
var oMonth = parseInt(document.getElementById('month').value);
var oStart = parseInt(document.getElementById('start').value);
var oDate = getNewDate(oYear, oMonth);
// 获取具体某年某月 有多少天
var days = getNumberDay(oYear, oMonth);
// 获取指定日期 是星期几
var theDay = oDate.getDay();
// 判断手动设置从 星期几开始 是否大于 当前的日期
if(theDay >= oStart){
// 获取日期开始的列
var start = theDay -oStart +1;
// 获取日期结束的列
var end = (days-(7 -start +1))% 7;
} else{
var start = theDay - oStart +8;
var end = (days-(7 -start +1))% 7;;
}
console.log(oYear, oMonth)
console.log("几月" + (oDate.getMonth()+1))
console.log("星期几" + theDay)
console.log("从第几天开始:"+ oStart)
console.log('开始日期:' +start);
console.log("结束日期" + end);
});
}
</script>
</head>
<body>
年份: <input type="text" id="year"> <br>
月份: <input type="text" id="month"> <br>
从第几天开始: <input type="text" id="start"> <br>
<input type="button" value="确定" id="but">
</body>
</html>
总结:
js中月份是从0开始的,也就是说如果new Date(2018, 9, 1)则表示是 2018/10/01
这里面求开始列的时候 是根据设置的开始日期 和当前日期作比较
设置日期 < 当前日期 则列数表示为 当前日期 - 设计日期 +1
设置日期 > 当前日期 则列数表示为 当前日期 - 设计日期 +1 + 7