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

在Swift中如何获取上个月的开始日期和结束日期

适配Swift的实现方案

你可以直接在现有Date扩展中新增两个方法,完全复用已有的startOfMonth、endOfMonth逻辑即可:

extension Date {
    // 原有已实现的方法
    func startOfMonth() -> Date {
        return Calendar.current.date(from: Calendar.current.dateComponents([.year, .month], from: Calendar.current.startOfDay(for: self)))!
    }
    
    func endOfMonth() -> Date {
        return Calendar.current.date(byAdding: DateComponents(month: 1, day: -1), to: self.startOfMonth())!
    }
    
    // 新增:获取上个月月初
    func startOfPreviousMonth() -> Date {
        // 先给当前日期减去1个月,再取对应月份的月初即可
        let previousMonthDate = Calendar.current.date(byAdding: .month, value: -1, to: self)!
        return previousMonthDate.startOfMonth()
    }
    
    // 新增:获取上个月月末
    func endOfPreviousMonth() -> Date {
        return self.startOfPreviousMonth().endOfMonth()
    }
}

使用示例

let currentDate = Date()
let previousMonthStart = currentDate.startOfPreviousMonth()
let previousMonthEnd = currentDate.endOfPreviousMonth()

// 打印验证
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
print("上个月开始:\(dateFormatter.string(from: previousMonthStart))")
print("上个月结束:\(dateFormatter.string(from: previousMonthEnd))")

补充说明

  • 系统Calendar的date(byAdding:)方法会自动处理跨年、大小月的边界情况,不需要手动计算年份偏移
  • 如果你不想使用强制解包,可以把方法返回值改为Date?类型,去掉结尾的!,使用时自行判空即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:39:05