繁体   English   中英

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

[英]How to get start date and end date of previous month in Swift

我是 Swift 的新人,我正在尝试获取上个月的开始日期和结束日期。 我知道这个月该怎么做

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())!
    }
    
}

但是我不知道上个月该怎么做。 我试过代码但没有工作

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *currentDate = [NSDate date];

NSDateComponents *components = [calendar components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:currentDate];

components.month = components.month - 1;
components.day = 1;

NSDate *newDate = [calendar dateFromComponents:components];

但它在目标 C 中。

首先你得到当前日期的当前月份,然后减去 1 得到上个月

extension Date {

 func addingRmoving(months: Int) -> Date? {
    let calendar = Calendar(identifier: .gregorian)

    var components = DateComponents()
    components.calendar = calendar
    components.timeZone = TimeZone(secondsFromGMT: 0)
    components.month = months

    return calendar.date(byAdding: components, to: self)
 }


var startOfMonth: Date {

    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents([.year, .month], from: self)

    return  calendar.date(from: components)!
}


var endOfMonth: Date {
    var components = DateComponents()
    components.month = 1
    components.second = -1
    return Calendar(identifier: .gregorian).date(byAdding: components, to: startOfMonth)!
}



}

以及如何使用它

let lastMonth = Date().addingRmoving(months: -1)
let fisrtDayOfLastMonth = lastMonth.startOfMonth
let lastDayOfLastMonth = lastMonth.endOfMonth
//Mark: - To get last months first day's date
func getLastMonthsFirstDay() -> Date {
let calendar = Calendar.current
let currentDate = Date()
var components = calendar.dateComponents([.day, .month, .day], from: currentDate)
components.month = components.month! - 1
components.day = 1
return  calendar.date(from: components)!
}

//Mark: - To get last months last day's date
func getLastMonthsLastDay() -> Date {
let calendar = Calendar.current
let currentDate = Date()

var components = calendar.dateComponents([.day, .month, .day], from: currentDate)

components.month = components.month! - 1
components.day = -1
return  calendar.date(from: components)!
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM