You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift3 iOS开发:如何通过Calendar获取上周日期?

嘿,你已经成功实现本周日期的获取了,这一步做得很好!要获取上周的日期,只需要在你现有代码的基础上稍作调整,核心思路是先拿到上周的基准日期,再用同样的逻辑计算该周的所有日期。

修改后的完整代码

let dateInWeek = Date()
let calendar = Calendar.current

// 先获取上周的基准日期(当前日期减去7天)
guard let lastWeekDate = calendar.date(byAdding: .day, value: -7, to: dateInWeek) else {
    fatalError("Failed to get last week date")
}

// 用上周的日期来计算周范围和日期数组
let dayOfWeek = calendar.component(.weekday, from: lastWeekDate)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: lastWeekDate)!
let lastWeekDates = (weekdays.lowerBound ..< weekdays.upperBound)
    .flatMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: lastWeekDate) }

print(lastWeekDates)

关键修改说明

  • 新增lastWeekDate:通过calendar.date(byAdding: .day, value: -7, to: dateInWeek)获取当前日期往前推7天的日期,这就是上周对应今天的日期。
  • 后续计算dayOfWeek、weekdays以及生成日期数组时,全部用lastWeekDate替代原来的dateInWeek,这样就能得到上周完整的7天日期了。

根据你提供的本周日期示例(2018-05-13至2018-05-19),修改后的代码输出应该是:

[2018-05-06 07:12:44 +0000, 2018-05-07 07:12:44 +0000, 2018-05-08 07:12:44 +0000, 2018-05-09 07:12:44 +0000, 2018-05-10 07:12:44 +0000, 2018-05-11 07:12:44 +0000, 2018-05-12 07:12:44 +0000]

可选:封装成可复用函数

为了方便后续复用,你可以把获取某一周日期的逻辑封装成扩展函数:

extension Calendar {
    func datesOfWeek(for date: Date) -> [Date] {
        let dayOfWeek = component(.weekday, from: date)
        guard let weekdays = range(of: .weekday, in: .weekOfYear, for: date) else {
            return []
        }
        return (weekdays.lowerBound ..< weekdays.upperBound)
            .flatMap { date(byAdding: .day, value: $0 - dayOfWeek, to: date) }
    }
}

// 使用方式
let calendar = Calendar.current
let thisWeekDates = calendar.datesOfWeek(for: Date())

// 获取上周日期
guard let lastWeekDate = calendar.date(byAdding: .day, value: -7, to: Date()) else {
    fatalError("Failed to get last week date")
}
let lastWeekDates = calendar.datesOfWeek(for: lastWeekDate)

内容的提问来源于stack exchange,提问作者user2786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:16