js获取上周、本周、上月、本月、第一天和最后一天

获取上周、本周的周一、周日

思路:先获取到本周一的时间
本周日:就是本周一的时间加6天的时间
上周一:就是本周一的时间减7天的时间
上周日:就是本周一的时间减1天的时间
注意:上面的思路不变,js里newDate.getDay()获取到日期所在的星期的第几天 0.1.2.3.4.5.6 【0 = 上周周日】
周一至周六newDate.getDay()获取到的为相应的1-6.但是周日获取到的天数为0。这是西方的计算方式,他们每周的周日为每周的第一天,这样我们用newDate.getDay()获取到的本周的0.1.2.3.4.5.6,其实0不是本周日期,为上周的周日。这里我们按照我们的习惯,周一为每周的第一天(下方代码里有相应的处理)

/**
 * 得到本周一、本周日、上周一、上周日的时间
 * 
 * return
 * {
 *   "thisWeekMonday": "2022-09-12",
 *   "thisWeekSunday": "2022-09-18",
 *   "lastWeekMonday": "2022-09-05",
 *   "lastWeekSunday": "2022-09-11"
 * }
 */
export function getMondayAndSunday() {
  var today = new Date();

  //构建当前日期,格式:2022-08-22 00:00:00
  var year = today.getFullYear(); //本年 
  var month = today.getMonth() + 1; //本月
  var day = today.getDate(); //本日
  var newDate = new Date(year + "-" + month + "-" + day + " 00:00:00"); //年月日拼接

  var nowTime = newDate.getTime(); //当前的时间戳
  var weekDay = newDate.getDay(); //当前星期 0.1.2.3.4.5.6 【0 = 周日】

  var oneDayTime = 24 * 60 * 60 * 1000; //一天的总ms

  // 当前星期减去天数,如今天为周五,则本周一为周五的时间戳减去4天的时间戳。但周日特殊,周一至周六是周几的到的weekDay就是几,但是周日的到的为0,需特殊处理
  var thisWeekMondayTime = (1 - weekDay) * oneDayTime + nowTime; //本周一的时间戳
  if (weekDay == 0) {
    // weekDay = 0 为周日,此时本周一时间为周日减去6天的时间
    thisWeekMondayTime = nowTime - 6 * oneDayTime
  }

  var thisWeekSundayTime = thisWeekMondayTime + 6 * 24 * 60 * 60 * 1000 // 本周日

  var lastWeekMondayTime = thisWeekMondayTime - 7 * oneDayTime // 上周一
  var lastWeekSundayTime = thisWeekMondayTime - oneDayTime // 上周日

  var res = {
    thisWeekMonday: dateToYYYYMMDD(thisWeekMondayTime),
    thisWeekSunday: dateToYYYYMMDD(thisWeekSundayTime),
    lastWeekMonday: dateToYYYYMMDD(lastWeekMondayTime),
    lastWeekSunday: dateToYYYYMMDD(lastWeekSundayTime),
  }
  return res;
}

获取上月、本月的第一天和最后一天

/**
 * 得到本月第一天、本月最后一天、上月第一天、上月最后一天日期
 * return
 *  {
 *	  "thisMonthFirstDay": "2022-09-01",
 *	  "thisMonthLastDay": "2022-09-30",
 *	  "lastMonthFirstDay": "2022-08-01",
 *	  "lastMonthLastDay": "2022-08-31"
 *  }
 */
export function getMonthFirstDayAndLastDay() {
  var date = new Date()
  // 值得注意的是,如果day取值为0,意味着取的是date时间的上一个月的最后一天,简单理解:date当前月的第一天,再减去一天
  var thisMonthFirstDay = date.setDate(1) // 本月第一天
  var thisMonthLastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0) // 本月最后一天

  var lastMonthFirstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1) // 上月第一天

  var lastMonthLastDay = date.setDate(0) // 上月最后一天
  // var day = new Date(date.getFullYear(), date.getMonth(), 0).getDate()
  // var lastMonthLastDay = new Date(date.getFullYear(), date.getMonth() - 1, day) // 上月最后一天
  var res = {
    thisMonthFirstDay: dateToYYYYMMDD(thisMonthFirstDay),
    thisMonthLastDay: dateToYYYYMMDD(thisMonthLastDay),
    lastMonthFirstDay: dateToYYYYMMDD(lastMonthFirstDay),
    lastMonthLastDay: dateToYYYYMMDD(lastMonthLastDay),
  }
  return res
}

代码中用到的日期转字符串方法

// 返回 yyyy-MM-dd 格式字符串
export function dateToYYYYMMDD(date) {
  var time = new Date(date);
  var y = time.getFullYear();
  var m = (time.getMonth() + 1);
  m = m > 9 ? m : '0' + m;
  var d = time.getDate();
  d = d > 9 ? d : '0' + d;

  return y + "-" + m + "-" + d;
}```


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值