使用Moment.js中获取上周的开始日期和结束日期(可自定义)

前言

有时候需求是这样的,想要获取上周的开始日期和结束日期,或者前几周的时间范围

比如今天是2023.11.28号,我想获取上周的周一到周日,也就是,上周的开始日期: 2023-11-20,上周的结束日期: 2023-11-26

moment || date

1.上代码,这种是直接获取的是上周的周一到周日

import moment from 'moment';

// 获取当前日期
const currentDate = moment();

// 获取上周的开始日期(周一)
const lastWeekStartDate = moment(currentDate).clone().subtract(1, 'weeks').startOf('isoWeek');

// 获取上周的结束日期(周天)
const lastWeekEndDate = moment(currentDate).clone().subtract(1, 'weeks').endOf('isoWeek');

console.log('上周的开始日期:', lastWeekStartDate.format('YYYY-MM-DD'));
console.log('上周的结束日期:', lastWeekEndDate.format('YYYY-MM-DD'));

moment date

2.如果想获取前三周的周一到周日

import moment from 'moment';

// 获取当前日期
const currentDate = moment();

// 获取上周的开始日期(周一)
const lastWeekStartDate = moment(currentDate).clone().subtract(3, 'weeks').startOf('isoWeek');

// 获取上周的结束日期(周天)
const lastWeekEndDate = moment(currentDate).clone().subtract(3, 'weeks').endOf('isoWeek');

console.log('上周的开始日期:', lastWeekStartDate.format('YYYY-MM-DD'));
console.log('上周的结束日期:', lastWeekEndDate.format('YYYY-MM-DD'));

moment date

3.如果想获取自定义的周一到周日

subtract(10, ‘weeks’) 这里的10可以替换成你想要的周期

import Moment from 'moment'
Vue.prototype.$moment = Moment

// 获取上周的开始日期(周一)
const lastWeekStartDate = this.$moment().clone().subtract(10, 'weeks').startOf('isoWeek');

// 获取上周的结束日期(周天)
const lastWeekEndDate = this.$moment().clone().subtract(10, 'weeks').endOf('isoWeek');

4.获取具体的时分秒

传时分秒进去就可以了,format('YYYY-MM-DD HH:mm:ss')

main.js`
import Moment from 'moment'
Vue.prototype.$moment = Moment
index.vue
// 获取上周的开始日期(周一)
const lastWeekStartDate = this.$moment().clone().subtract(10, 'weeks').startOf('isoWeek');

// 获取上周的结束日期(周天)
const lastWeekEndDate = this.$moment().clone().subtract(10, 'weeks').endOf('isoWeek');
console.log('上周的开始日期:', lastWeekStartDate.format('YYYY-MM-DD HH:mm:ss'))
console.log('上周的结束日期:', lastWeekEndDate.format('YYYY-MM-DD HH:mm:ss'))

注意事项

  • 1.不能把.clone()去掉,目的是为了创建一个Moment对象的副本,不会影响到当前日期currentDate
  • 2.使用 subtract(1, ‘weeks’) 减去一周,前面的数字就是你自定义的周期数
  • 3.startOf('week')endOf('week')分别获取上周的开始日期和结束日期,周日作为一周的开始,这可能与你所在的地区的一周开始日期不一致。
  • 4.startOf('isoWeek')endOf('isoWeek')获取的是上周的周一到周日
如有对时间不懂的可留言!!!