1.工具类代码
export interface WeekRange {
firstDay: string
lastDay: string
weekOffset: number
}
export class SimpleWeekUtils {
/**
* 核心方法:获取指定偏移量的周范围
* @param weekOffset 周偏移量:0=本周,-1=上周,1=下周,-2=上上周,2=下下周,以此类推
* @param startOfWeek 周起始日:0=周日,1=周一
* @returns 周范围对象(包含字符串格式的日期)
*/
static getWeekRange(weekOffset: number, startOfWeek: number = 1): WeekRange {
const baseDate = new Date()
const targetDate = new Date(baseDate)
// 应用周偏移
targetDate.setDate(targetDate.getDate() + weekOffset * 7)
const dayOfWeek = targetDate.getDay()
let firstDayAdjustment: number
let lastDayAdjustment: number
if (startOfWeek === 1) {
// 以周一作为一周的第一天
const adjustedDay = dayOfWeek === 0 ? 6 : dayOfWeek - 1
firstDayAdjustment = -adjustedDay
lastDayAdjustment = 6 - adjustedDay
} else {
// 以周日作为一周的第一天(默认)
firstDayAdjustment = -dayOfWeek
lastDayAdjustment = 6 - dayOfWeek
}
const firstDay = new Date(targetDate)
firstDay.setDate(targetDate.getDate() + firstDayAdjustment)
const lastDay = new Date(targetDate)
lastDay.setDate(targetDate.getDate() + lastDayAdjustment)
// 返回字符串格式的日期
return {
firstDay: SimpleWeekUtils.formatDate(firstDay),
lastDay: SimpleWeekUtils.formatDate(lastDay),
weekOffset
}
}
/**
* 格式化日期为 YYYY-MM-DD
*/
private static formatDate(date: Date): string {
const year = date.getFullYear()
const month = (date.getMonth() + 1).toString().padStart(2, '0')
const day = date.getDate().toString().padStart(2, '0')
return `${year}-${month}-${day}`
}
}
2.使用方式
@State weekOffset: number = 0
@State currentWeek: WeekRange = {} as WeekRange;
this.currentWeek = SimpleWeekUtils.getWeekRange(this.weekOffset);