js计算每月有几周问题(含周跨月情况)

麻辣烫不烫 2018-07-09 03:32:05
每周以星期一为周开始时间,星期天为周结束时间;对于周有跨月的情况的,按以下规则处理:
如果跨月周的星期四是在前一个月的,则这周规划给前一个月,作为前一个月的最后一周,如果跨月周的星期四是在后一个月的,则这周规划给后一个月,作为后一个月的第一周。
计算2018年每个月有几周?(求JS代码)
...全文
1043 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qq@ 2018-07-10
  • 打赏
  • 举报
回复
引用 4 楼 天际的海浪的回复:
明白了,你这问题说白了就是看一个月中有几个星期四

function baynum(y,m) {
var s = (new Date(y,m-1,1).getDay()+6)%7;
var e = (new Date(y,m,0).getDay()+6)%7;
return s<=3 && e>=3 ? 5:4;
}
for (var i = 1; i <= 12; i++) {
console.log("2018年"+i+"月:"+baynum(2018,i));
}
拜读了下,厉害。。 问下针对这个问题,是不是把+6变成+7会很好理解一点,然后s计算的是当月第一天的周几,但是e计算的是下个月最后一天是周几。。要不要修改下e的m呢?不知道我的理解有没有错?
天际的海浪 2018-07-10
  • 打赏
  • 举报
回复
引用 5 楼 weixin_28750673 的回复:
[quote=引用 4 楼 天际的海浪的回复:]明白了,你这问题说白了就是看一个月中有几个星期四

function baynum(y,m) {
var s = (new Date(y,m-1,1).getDay()+6)%7;
var e = (new Date(y,m,0).getDay()+6)%7;
return s<=3 && e>=3 ? 5:4;
}
for (var i = 1; i <= 12; i++) {
console.log("2018年"+i+"月:"+baynum(2018,i));
}

拜读了下,厉害。。
问下针对这个问题,是不是把+6变成+7会很好理解一点,然后s计算的是当月第一天的周几,但是e计算的是下个月最后一天是周几。。要不要修改下e的m呢?不知道我的理解有没有错?[/quote]
这里的+6再%7是为了改成每周以星期一为周开始时间,系统默认是以星期日为周开始时间
你变成+7就没有意义了。想好理解一点可以%7之后再+1
(new Date(y,m-1,1).getDay()+6)%7+1;

e获取的是本月的最后一天。也就是下个月的0号,Date对象会自动调整的
天际的海浪 2018-07-09
  • 打赏
  • 举报
回复
明白了,你这问题说白了就是看一个月中有几个星期四

function baynum(y,m) {
var s = (new Date(y,m-1,1).getDay()+6)%7;
var e = (new Date(y,m,0).getDay()+6)%7;
return s<=3 && e>=3 ? 5:4;
}
for (var i = 1; i <= 12; i++) {
console.log("2018年"+i+"月:"+baynum(2018,i));
}
天际的海浪 2018-07-09
  • 打赏
  • 举报
回复
一个月28到31天,你前后跨月规则都一样,这样每月肯定都是4周啊
丰云 2018-07-09
  • 打赏
  • 举报
回复
几个周末还差不多
丰云 2018-07-09
  • 打赏
  • 举报
回复
毫无意义,每月必定有4周

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧