计算给定日期是当年的第几周

今天,小伙伴问我,给定一个日期,能不能算出日期是本年的第几周。

这个问题瞬间让我来了兴趣,思考了一会儿,便着手编写代码了。

我的思路很简单,

  • 以周一作为一周的起始点,计算元旦和周日的偏差值a
  • 计算给定日期和元旦的日期差b
  • 日期差b除以7,计算出元旦为周一情况下的周数c
  • 日期差b除以7的余数,作为纠偏值d
  • 将纠偏值d和偏差值a做比较,d>=a表示当前日期已经不在本周的范围内,周偏差值e=1,否则e=0
  • 最后 c+e+1 就是我们所求的值

为什么c+e之后又+1,第一周内日期除以7的商都是0,所以+1

下面是demo

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script>
        function displayDate(dateStr) {
            //根据传入的参数,初始化时间
            var d = new Date(dateStr);
            //计算传入参数时间的元旦
            var year_first_day = new Date();
            year_first_day.setDate(1);
            year_first_day.setMonth(0);
            year_first_day.setFullYear(d.getFullYear());
            //时间统一设置为 00:00:00:0000,目的是为了计算结果不出现小数
            d.setHours(0, 0, 0, 0);
            year_first_day.setHours(0, 0, 0, 0);
            //计算参数年的元旦当天是周几
            var year_first_day_weekday = year_first_day.getDay();
            //以每周一为一周的起始,星期天为0,替换为7,方便理解
            year_first_day_weekday = year_first_day_weekday == 0 ? 7 : year_first_day_weekday;
            //计算元旦距离本周结束还有几天
            var week_left_days = Math.abs(year_first_day_weekday - 7) + 1;
            //计算参数日期和元旦的天数差
            var diff = d - year_first_day;
            var diff_days = diff / 1000 / 60 / 60 / 24;
            //取整,因为是上面已经有过处理,此处也可以注释
            diff_days = diff_days.toFixed(0);
            //计算大概周数
            var week_1 = parseInt(diff_days / 7);
            //天数差的余数,用来补足周数
            var week_2 = diff_days % 7;
            //余数和元旦周差进行对比,差值等于0,代表今天是星期一,已经是新的一周了,大于0,就不解释了
            var add = week_2 >= week_left_days ? 1 : 0;
            //计算实际的周数,week_1+1是因为0代表的是第一周,add是补全差值
            var week = week_1 + 1 + add;
            week = parseInt(week);
            
            document.getElementById("weekidx").innerHTML = week;
        }
    </script>
</head>

<body>
    <div align="center">

        <h1>请输入日期</h1>
        <p><input type="date" id="choosedate" /></p>
        <p id="demo">所选日期是其所在年份的第<span id="weekidx">&emsp;</span>周</p>

        <button type="button" onclick="displayDate(document.getElementById('choosedate').value)">计算</button>
    </div>
</body>

</html>

当然,你也可以把周日当作一周的第一天,只需要将上面的某行代码做下小小的改动即可实现;

如果各位看官真的有这个需求的话,这个小小的改动就交给你自己做了哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值