我想判断当前时间是单周还是双周,用js写了个demo,效果是实现了,但是不知科学否?有没有更好的方法?
<script>
document.write('xx科技有限公司放假时间');
function getDateIndex(){
var d = new Date(); //实例化时间函数
var now = d.getTime(); // 获取距 1970 年 1 月 1 日之间的毫秒数
var n = now - 259200000; // 由于1970.1.1 是星期四,不是星期一,减去后面三天
//document.write(now);
var dayIndex = Math.ceil(n / 86400000) - 1;
var weekIndex = Math.ceil(dayIndex / 7);
var ds = weekIndex % 2; // 判断单双周
//alert(ds);
var day = d.getDay(); // 返回一周中的某一天
if(ds == 0){
switch(day){
case 0:
x ="今天是单周的星期天,干了一周,累成狗,终于可以休息了,只可惜明天就要上班了。。。";
break;
case 1:
x ="今天是单周的星期一,才放一天假。。。";
break;
case 2:
x ="今天是单周的星期二,才放一天假。。";
break;
case 3:
x ="今天是单周的星期三,才放一天假。。";
break;
case 4:
x ="今天是单周的星期四,才放一天假。。";
break;
case 5:
x ="今天是单周的星期五,才放一天假。。";
break;
case 6:
x ="今天是单周的星期六,才放一天假。。";
break;
}
}else{
switch(day){
case 0:
x ="今天是双周的星期天,明天要上班了。。。";
break;
case 1:
x ="今天是双周的星期一,两天假哦!!";
break;
case 2:
x ="今天是双周的星期二,两天假哦!!";
break;
case 3:
x ="今天是双周的星期三,两天假哦!!";
break;
case 4:
x ="今天是双周的星期四,两天假哦!!";
break;
case 5:
x ="今天是双周的星期五,两天假哦!!";
break;
case 6:
x ="今天是双周的星期六,放假休息ing,播种好季节!!";
break;
}
}
alert(x);
}
window.onload = getDateIndex;
</script>
你关键看你单双周怎么定义的,你这算法是每年的1月1日都是星期一,如果不是星期一计算就出问题了。
<script>
/**
* 判断年份是否为润年
*
* @param {Number} year
*/
function isLeapYear(year) {
return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}
/**
* 获取某一年份的某一月份的天数
*
* @param {Number} year
* @param {Number} month
*/
function getMonthDays(year, month) {
return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28);
}26 /**
* 获取某年的某天是第几周
* @param {Number} y
* @param {Number} m
* @param {Number} d
* @returns {Number}
*/
function getWeekNumber(y, m, d) {
var now = new Date(y, m - 1, d),
year = now.getFullYear(),
month = now.getMonth(),
days = now.getDate();
//那一天是那一年中的第多少天
for (var i = 0; i < month; i++) {
days += getMonthDays(year, i);
}
//那一年第一天是星期几
var yearFirstDay = new Date(year, 0, 1).getDay() || 7;
var week = null;
if (yearFirstDay == 1) {
week = Math.ceil(days / yearFirstDay);
} else {
days -= (7 - yearFirstDay + 1);
week = Math.ceil(days / 7) + 1;
}
return week;
}
var weekIndex =getWeekNumber(2014,1,6);
var ds = weekIndex % 2; // 判断单双周
alert(ds);
</script>
不是的,我是通过getTime():返回1970.1.1至今的毫秒数,大家都知道,一天的时间t为86400000毫秒,既然知道总毫秒数allT,那么就可以通过t/allT得到1970.1.1至今为止的总天数allD,那么就可以根据总天数allD/7得到总星期数,假设,第一个星期为单周,则第二个星期就为双周,那么得知总星期数除2取余的值为0时,双周,值为1时则为单周。不知是否合理
你相当于是减去1970-1-1的天数,除以7以后,再除2取余。算法是对的,问题是1970-1-1不是星期一,所以你的计算结果应该是有偏差的,你可以试一下上半周和下半周可能单双周的属性不一致