使用Moment.js中获取上周的开始日期和结束日期(可自定义)
前言
有时候需求是这样的,想要获取上周的开始日期和结束日期,或者前几周的时间范围
比如今天是2023.11.28号,我想获取上周的周一到周日,也就是,上周的开始日期: 2023-11-20,上周的结束日期: 2023-11-26
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'));
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'));
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')
获取的是上周的周一到周日