Swift 获取两个日期之间所有的日期

1,305 阅读1分钟
/// 获取两个日期之间的所有日期,精确到天
/// - Parameters:
///   - leftDateStr: 最小时间
///   - rightDateStr: 最大时间
func getDayArray(leftDateStr: String, rightDateStr: String) -> [String] {
    let dateformatter = DateFormatter()
    dateformatter.dateFormat = "yyyy-MM-dd"
    
    let leftDate = dateformatter.date(from: leftDateStr)
    let rightDate = dateformatter.date(from: rightDateStr)
    
    if leftDate == rightDate{
        let greorian = Calendar(identifier: .gregorian)
        //Calendar.Component.weekday | Calendar.Component.year | Calendar.Component.month | Calendar.Component.day
        let comp = greorian.dateComponents([.weekday,.year,.month,.day], from: leftDate!)
        let beginningOfweek = greorian.date(from: comp)
        let dateDay = DateFormatter()
        dateDay.dateFormat = "yyyy-MM-dd"
        let currentDateStr = dateDay.string(from: beginningOfweek!)
        return [currentDateStr]
    }
    var dayArray = [String]()
    var currentDate = leftDate
    
    let gregorian = Calendar(identifier: .gregorian)
    let comp = gregorian.dateComponents([.weekday,.year,.month,.day], from: leftDate!)
    
    while currentDate! < rightDate! {
        let beginningOfWeek = gregorian.date(from: comp)
        currentDate = beginningOfWeek
        let dateDay = DateFormatter()
        dateDay.dateFormat = "yyyy-MM-dd"
        let currentDateStr = dateDay.string(from: beginningOfWeek!)
        dayArray.append(currentDateStr)
    }
    return dayArray
}

最近需求需要自己写一个datepicker,要求最大和最小时间之外的时间不显示。所以需要自己用pickerView实现一套。需求中的一点是精确到天的选择。故写了一个方法,获取一段日期之间的所有天。