美文网首页
js计算每月从一号开始的每周开始结束日期,每月有多少周

js计算每月从一号开始的每周开始结束日期,每月有多少周

作者: keknei | 来源:发表于2023-07-17 15:17 被阅读0次

项目中有业务需求,需要查看每个月从一号开始的每周开始结束日期,并且可以点击上一周、下一周来查看日期。

我们先把html的架子和css样式写出来
html代码

<div class="timeBox">
  <a href="javascript:;" id="pre">上一周</a>
  <span id="time"></span>
  <a href="javascript:;" id="next">下一周</a>
</div>

css代码

.timeBox{
  display:flex;
  justify-content:center;
  margin: 50px auto 0 auto;
}
.timeBox span{
  margin:0 20px;
}

我们开始计算时间,下面是js代码

let dateTime = new Date(); // 定义全局时间
let weekCount = 0; // 定义全局当月共多少周
let week = 0; // 定义全局当天是当月的第几周

// 点击上一周
const preEl = document.querySelector("#pre");
preEl.addEventListener("click",() => {
  if (week === 2) {
    // 某月的第一周,设置本月的第一天
    dateTime.setDate(1);
  } else if (week === 1) {
    // 上个月的最后一周,设置上个月的最后一天
    dateTime.setDate(0);
  } else {
    // 某月的中间几个周
    const date = dateTime.getDate();
    dateTime.setDate(date - 7);
  }
  setWeek();
}, false);
// 点击下一周
const nextEl = document.querySelector("#next");
nextEl.addEventListener("click",() => {
  if (week === weekCount - 1) {
    // 某月的最后一周,设置本月的最后一天
    const month = dateTime.getMonth();
    dateTime.setMonth(month + 1);
    dateTime.setDate(0);
  } else if (week === weekCount) {
    // 下个月的第一周
    const month = dateTime.getMonth();
    dateTime.setMonth(month + 1);
    dateTime.setDate(1);
  } else {
    // 某月的中间几个周
    const date = dateTime.getDate();
    dateTime.setDate(date + 7);
  }
  setWeek();
}, false);

// 设置当月每周开始结束的日期
function setWeek() {
  // 获取元素
  const timeEl = document.querySelector("#time");
  // 本月的1号是周几
  const currentDate = new Date(dateTime);
  currentDate.setDate(1);
  let day1 = currentDate.getDay();
  if (day1 === 0) {
    day1 = 7;
  }
  // 当前月一共有多少天
  const tempDate = new Date(dateTime);
  const month = tempDate.getMonth();
  tempDate.setMonth(month+1);
  tempDate.setDate(0)
  const countDate = tempDate.getDate();
  // 当前月第一周有几天
  const firstWeekCount = 7 - day1 + 1;
  // 当前月一共有几周
  let d = 1;
  if (day1 != 1) {
    d = 7 - day1 + 2;
  }
  weekCount = Math.ceil((countDate - d + 1) / 7);
  if (day1 !== 1) {
    weekCount = weekCount + 1;
  }
  // 当前时间是本月的第几周
  let day = dateTime.getDay();
  if (day === 0) {
    day = 7;
  }
  week = Math.ceil((dateTime.getDate() + 7 - day) / 7);
  // 当前月当前周的开始结束日期
  let weekStartDate = "";
  let weekEndDate = "";
  
  if (week == 1) {// 第一周
    // 开始时间
    const cDate = new Date(dateTime);
    cDate.setDate(1);
    const sDate = getDate(cDate);
    weekStartDate = `${sDate.year}-${sDate.month}-${sDate.day}`;
    // 结束时间
    cDate.setDate(1 + firstWeekCount - 1);
    const eDate = getDate(cDate);
    weekEndDate = `${eDate.year}-${eDate.month}-${eDate.day}`;
  } else if (week == weekCount) { // 最后一周
    // 开始时间
    const cDate = new Date(dateTime);
    cDate.setDate(1 + firstWeekCount + (weekCount - 2) * 7);
    const sDate = getDate(cDate);
    weekStartDate = `${sDate.year}-${sDate.month}-${sDate.day}`;
    // 结束时间
    cDate.setMonth(month+1);
    cDate.setDate(0)
    const eDate = getDate(cDate);
    weekEndDate = `${eDate.year}-${eDate.month}-${eDate.day}`;
  } else { // 中间周
    // 开始时间
    const cDate = new Date(dateTime);
    cDate.setDate(1 + firstWeekCount + (week - 2) * 7);
    const sDate = getDate(cDate);
    weekStartDate = `${sDate.year}-${sDate.month}-${sDate.day}`;
    // 结束时间
    cDate.setDate(1 + firstWeekCount + (week - 2) * 7 + 6);
    const eDate = getDate(cDate);
    weekEndDate = `${eDate.year}-${eDate.month}-${eDate.day}`;
  }
  
  timeEl.innerHTML = `${weekStartDate} 至 ${weekEndDate}`;
}
// 获取时间日期
function getDate(date) {
  const year = date.getFullYear();
  let month = date.getMonth();
  month = month + 1;
  const day = date.getDate();
  return {year, month, day};
}
// 初始化时间
setWeek();

下面是7月份最后一周的开始结束日期,因为只有31号,所以开始和结束日期都是31号

7月份最后一周.png

下面是7月份中间一周的开始结束日期,从周一开始到周日结束

7月份中间一周.png

下面是7月份第一周的开始结束日期,因为只有2天,所以开始是1号,结束日期是2号

7月份第一周.png

当前月的下月的1号是从周二开始的,所以就从周二开始算共六天

当前月的下月的第一周.png

相关文章

  • 做更好的自己—2016年1月总结

    从2013年开始写周记,每天每周每月每年都会总结自己。 从1月开始,每月在简书上总结上个月所做的事情。 坚持,做最...

  • 2020-11-29第28周复盘

    2020-11-29第28周复盘 11.23 认知升级: 计算每月基本花费(衣服,书籍,社交)开始定投:每月工资4...

  • 2021.4 自我提升计划:阅读、健康、情绪、时间管理

    从2021年1月开始,我开始在公众号更新每月小结,收入“每月复盘”专辑。因为这个小小的举动,公众号还增加了不少关注...

  • 1月推荐书单及书评

    我从一月开始,每周读一本书,每月四周,总共四本,以后都会在月末与大家分享交流~欢迎大家批评指正~ 1《乌合之众,大...

  • 【职业测试炒股第一周】工作计划

    专业炒股这个事情,需要以结果为导向,每周总结一次,计算得失,每月盈亏多少,查漏补缺! 六月下面2周的交易时间, 预...

  • 时间/日期

    1.计算每月天数函数: day(eomonth(日期,0)) eomonth 用于计算指定日期之前或之后几个月的最...

  • 从100元开始理财(74)

    # 理财,从梳理开始 你知道自己每月的工资是多少么,确切到个位数? 你知道自己每月的生活支出是多少么? 你知道自己...

  • datetimepicker实现开始日期小于结束日期

    datetimepicker实现开始日期小于结束日期 html代码 js代码

  • 每日每周每月

    进入初中生活,也在不断的,慢慢的适应新的环境,新的课程,新的同学,新的老师…… 时间作息比较少,上三节晚自...

  • 深度的现在

    大家是否有这种感觉,每天没觉得干多少事,就匆匆结束了,至于每周,每月,每年,好像都是如此。甚至有一些感觉,每天都想...

网友评论

      本文标题:js计算每月从一号开始的每周开始结束日期,每月有多少周

      本文链接:https://www.haomeiwen.com/subject/efegudtx.html