【问题标题】:How to get start date and end date of previous month in Swift如何在 Swift 中获取上个月的开始日期和结束日期
【发布时间】:2021-10-06 11:23:25
【问题描述】:

我是 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];

但它在 Objective C 中。

【问题讨论】:

    标签: ios swift date


    【解决方案1】:

    首先你得到当前日期的当前月份 然后减 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
    

    【讨论】:

    • 您的代码运行良好,但我希望开始日期为 1 而不是 30 或 31。
    • 当您在您的时区转换它或在设备上运行您的代码或通过转换它的字符串检查日期时,它会给您 1
    • 简单的方法是通过日期格式化程序将日期转换为字符串
    • 我使用了这段代码 let formatterStart = DateFormatter() formatterStart.dateFormat = "dd/MM/yyyy" let resultStart = formatterStart.string(from: fisrtDayOfLastMonth!) 并且它可以工作
    • 是的,它确实有效,因为我已经在我上传到 appStore 的应用程序中使用了它...... :)
    【解决方案2】:
    //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)!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多