本文原创,转载请注明出处,如果发现写的有问题欢迎指正
目录
好久没有记录工作中遇到的问题,其中的原因之一应该是没有什么代表性的或者说是没有网上搜不到答案的,毕竟在大多数前端中我还是很渺小。今天写这个博客就是因为工作中遇到了问题而且网上也没有找到合适的答案,自己写了大部分代码加上借鉴了一些别人的思想,下面就步入正题:
—更新:2018-6-20 加上今天是不是周日的判断
总触发方法(今天是第几周、本月有几周)
<!--获取今天的信息-->
function getTodayWeekInfo () {
var nowDate = new Date(); // 今天的年份
var nowMonth = nowDate.getMonth()+1; // 今天的月份
var timeIsWeek = ''; // 今天属于第几周
var timeHasWeeks = ''; // 本月共有几周
timeIsWeek = getMonthWeek(nowDate.getFullYear(), nowMonth, nowDate.getDate());// 今天是第几周
timeHasWeeks = getWeekCount(nowDate.getFullYear(), nowMonth);// 本月共几周
if (timeIsWeek < 1) { // 如果小于1,说明属于上个月的最后一周
timeHasWeeks = getWeekCount(nowDate.getFullYear(), nowMonth);// 上月共几周
timeIsWeek = Math.abs(timeIsWeek);
}
console.info('今天是第'+timeIsWeek+'周--本月有'+timeHasWeeks+'周--本月是'+nowMonth+'月');
}
getTodayWeekInfo();// 触发获取本周有几周、今天是第几周
获取今天是本月第几周
<!--获取今天是第几周-->
var getMonthWeek = function (y, m, d) {// 传参是实际时间,如:今天是2018-5-7,传 2018, 5, 7
var date = new Date(y,m-1,d);// m等于实际月份,m-1等于日历月份
var dateStart = new Date(y,m-1,1);// 本月初
var weekNum = 1;// 默认今天是本月第一周
var firstWeekDate = 1;// 默认第一周是本月1号
if (dateStart.getDay() === 1) { // 判断1号是周一
firstWeekDatek = 1;
} else if (dateStart.getDay() === 0) { // 判断1号是周日
firstWeekDate = 8 - 7 + 1;
} else { // 判断1号是周二至周六之间
firstWeekDate = 8 - dateStart.getDay() + 1;
}
if (date.getDay() === 1 && date.getDate() < 7) {// 如果今天是周一,且小于7号,那么本周就是本月第一周
weekNum = 1;
} else if (date.getDate() < firstWeekDate ) {// 如果今天不在本月第一周内,则是上个月的最后一周
console.info('今天是上个月最后一周');
weekNum = getWeekCount(y, m-1);// 在此可以区分本周属于上月
} else {// 如果不符合上面判断,那么本周数据本月内的周
// 今天是几号/7
if (c < 7) {
weekIndex = Math.ceil(c/7); // 当前日期小于7,向上取整
} else {
c = c - (firstWeek - 1); // 大于7,减去属于上周的天数
if (c%7 === 0) { // 如果能被7整除
if (dateStart.getDay() !== 6) {
weekIndex = c/7;
} else {
weekIndex = c/7 + 1; // 今天如果是周日,需要加1周
}
} else {
weekIndex = Math.ceil(c/7); // 如果不能被7整除,需要向上取整
}
}
}
return weekNum;
};
获取某年某月的有多少周、多少天、第一周是几号
<!--获取某年某月的有多少周-->
var getWeekCount = function (y, m) {// 传参是实际时间,如:今天是2018-5,传 2018, 5
var date = new Date(y,m-1,1);// m等于实际月份,m-1等于日历月份,最后的1是为了模拟本月初始时间1号来计算1号是不是第一周
<!--为了模拟本月1号是否为本月第1周的判断-->
var firstWeekDate = 1;// 默认第一周是本月1号
if (date.getDay() === 1) { // 判断1号是周一
firstWeekDatek = 1;
} else if (date.getDay() === 0) { // 判断1号是周日
firstWeekDate = 8 - 7 + 1;
} else { // 判断1号是周二至周六之间
firstWeekDate = 8 - date.getDay() + 1;
}
console.info('今天是'+date.getFullYear()+'年'+(date.getMonth()+1)+'月:');
console.info('本月第一周是-----:'+firstWeekDate+'号');
date.setMonth(date.getMonth()+1);
date.setDate(0);
var monthHasDays = date.getDate();// 本月天数
console.info('本月有-----:'+date.getDate()+'天');
monthHasDays = date.getDate() - firstWeekDate + 1;
var hasWeek = Math.ceil(monthHasDays/7); // 计算本月有几周
console.info('本月有-----:'+hasWeek+'周');
return hasWeek;
};
获取今天是今年的第几周、第几天
<!--获取今天是今年的第几周-->
var weekNumInYear = function () {
var nowDate = new Date();
var initTime = new Date();
initTime.setMonth(0); // 本年初始月份
initTime.setDate(1); // 本年初始时间
var differenceVal = nowDate - initTime ; // 今天的时间减去本年开始时间,获得相差的时间
var todayYear = Math.ceil(differenceVal/(24*60*60*1000)); // 获取今天是今年第几天
var weekYear = Math.ceil(todayYear/7); // 获取今天是今年第几周
console.info("今天是本年第"+todayYear+"天,第"+weekYear+"周");//周日做为下周的开始计算
};
weekNumInYear();
总结
工作中经验积累、分享一些遇到的问题,再回头想想,感觉充实了一些。