计算单双周

起因

个人在辅助小孩写作业过程中,偶尔会有需求知道今天还是双周决定什么内容课本

这个功能对于我来说,并非刚需,也是偶发的。而且感觉也不会太难,于是就起了自己做一个“在线小工具”的念头。

操作简单,直接选择下“开始日期”和“计算日期”点下按钮可以

大家可以体验下(在线小工具:JSON 转换 Excel;单双周计算; - Development Environment)

硬货

以下是主要代码

calc方法获取和“计算日期”和“开始日期”,进行了计算,并将结果输出到页面。

function calc() {
      let weeks = weeksBetweenDatesByYearWeek(vm.week.endDate, vm.week.startDate);
      vm.error = "相差周数为:" + weeks;
    }

weeksBetweenDatesByYearWeek方法接受两个日期计算周数差异

function weeksBetweenDatesByYearWeek(date1, date2) {
  const week1 = getWeekOfYear(date1);
  const week2 = getWeekOfYear(date2);

  // 返回周数差异(注意处理跨年情况,这里假设date2在date1之后)
  return Math.abs(week2 - week1);
}

getWeekOfYear方法用于获取某个日期在本年度的周数。

function getWeekOfYear(date) {
  // 创建一个与给定日期相同但时间为当天的00:00:00的副本
  const startOfDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());

  // 获取当年1月1日是星期几(0代表星期日,6代表星期六)
  const startOfYearDay = new Date(date.getFullYear(), 0, 1).getDay();

  // 计算从当年1月1日到给定日期的天数偏移量
  let dayOfYear = Math.floor((startOfDate - new Date(date.getFullYear(), 0, 1)) / (1000 * 60 * 60 * 24));

  // 根据ISO 8601,如果1月1日不是星期一,则需要调整偏移量
  if (startOfYearDay <= 4) {
    dayOfYear += startOfYearDay;
  } else {
    dayOfYear += startOfYearDay - 7;
  }

  // 返回周数(ISO周数是从1开始的)
  return Math.ceil(dayOfYear / 7);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值