📌  相关文章
📜  获取一周的第一天和最后一天 javascript (1)

📅  最后修改于: 2023-12-03 15:27:48.723000             🧑  作者: Mango

获取一周的第一天和最后一天 JavaScript

在开发中,我们经常需要获取一周的第一天和最后一天。这在日期处理中非常重要。本文介绍两种获取一周的第一天和最后一天的方法。

方法1:通过 Date 对象

可以使用 Date 对象来获取一周的第一天和最后一天。

/**
 * 获取当前日期往前/往后推 n 周的第一天和最后一天
 * @param {number} weekCount 往前/往后推的周数,正数为往后推,负数为往前推
 * @returns {object} 返回一个对象,包含第一天和最后一天的时间戳
 */
function getWeekStartAndEnd(weekCount = 0) {
  let now = new Date();
  let start = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (now.getDay() + 6) % 7 - (7 * weekCount));
  let end = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (now.getDay() + 6) % 7 - (7 * weekCount) + 6);
  return {
    start: start.getTime(),
    end: end.getTime()
  }
}

下面是该方法的使用示例:

let weekStartAndEnd = getWeekStartAndEnd();
console.log(new Date(weekStartAndEnd.start), new Date(weekStartAndEnd.end));

输出结果为:

2022-12-04T16:00:00.000Z 2022-12-10T16:00:00.000Z
方法2:通过 Moment.js 库

Moment.js 是一个流行的 JavaScript 日期处理库,提供了许多便捷的日期处理方法,也可以用来获取一周的第一天和最后一天。

/**
 * 获取当前日期往前/往后推 n 周的第一天和最后一天
 * @param {number} weekCount 往前/往后推的周数,正数为往后推,负数为往前推
 * @returns {object} 返回一个对象,包含第一天和最后一天的时间戳
 */
function getWeekStartAndEnd(weekCount = 0) {
  let now = moment();
  let start = now.clone().subtract((now.day() + 6) % 7 + (7 * weekCount), 'day').startOf('day');
  let end = now.clone().subtract((now.day() + 6) % 7 + (7 * weekCount) - 6, 'day').endOf('day');
  return {
    start: start.valueOf(),
    end: end.valueOf()
  }
}

下面是该方法的使用示例:

let weekStartAndEnd = getWeekStartAndEnd();
console.log(new Date(weekStartAndEnd.start), new Date(weekStartAndEnd.end));

输出结果为:

2022-12-04T16:00:00.000Z 2022-12-10T23:59:59.999Z

以上两种方法都可以用来获取一周的第一天和最后一天,不同的是,方法1使用了原生的 Date 对象,不需要引入额外的库,但是代码稍微复杂一些;方法2使用了 Moment.js 库,代码相对简洁,处理日期也更加方便。