在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
相关产品推荐
相关产品推荐

