Ios 如何比较大于当前日期的日期数组

Ios 如何比较大于当前日期的日期数组,ios,arrays,swift,string,nsdate,Ios,Arrays,Swift,String,Nsdate,如何在swift中比较大于和小于当前日期的“日期”字符串数组。 这是我从服务器获取的阵列 "leave_dates": [ "03-09-2017", "04-09-2017", "05-09-2017", "04-09-2017", "01-09-2017", "07-09-2017", "09-09-2017", "10-09-2017", "12-

如何在swift中比较大于和小于当前日期的“日期”字符串数组。 这是我从服务器获取的阵列

"leave_dates": [
        "03-09-2017",
        "04-09-2017",
        "05-09-2017",
        "04-09-2017",
        "01-09-2017",
        "07-09-2017",
        "09-09-2017",
        "10-09-2017",
        "12-09-2017",
        "13-09-2017",
        "15-09-2017",
        "16-09-2017",
        "23-09-2017"
    ],

首先,您需要将
字符串日期
转换为
日期
对象,这可以通过使用
日期格式化程序来实现。然后,您可以使用
过滤器检查日期是否大于今天:

let dates =  ["03-09-2017", "04-09-2017", "05-09-2017", "04-09-2017", "01-09-2017", "07-09-2017", "09-09-2017", "10-09-2017", "12-09-2017", "13-09-2017", "15-09-2017", "16-09-2017", "23-09-2017"]

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"

let greaterThanToday = dates.filter({ dateFormatter.date(from: $0)! > Date() })
print(greaterThanToday) // ["23-09-2017"]

使用
Dateformtter
类将其转换为日期,然后与今天的日期进行比较。您可以将代码包装在CustomDateFormatter中,并使用静态函数比较日期并返回bool

class CustomDateFormatter {

    // MARK: - Properties
    private static var dateFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateFormat = "dd-MM-yyyy"
        return formatter
    }

    // MARK: - Public
    static func date(from string: String) -> Date? {
        return dateFormatter.date(from: string)
    }

    static func campare(_ string: String, with date: Date = Date()) -> Bool {
        guard let newDate = dateFormatter.date(from: string) else {
            return false
        }
        return newDate > date
    }
}
现在你可以像这样使用它了

    let leave_dates = ["03-09-2017", "04-09-2017", "05-09-2017", "04-09-2017", "01-09-2017", "07-09-2017", "09-09-2017", "10-09-2017", "12-09-2017", "13-09-2017", "15-09-2017", "16-09-2017", "23-09-2017"]
    let today = Date()
    let greaterThanToday = leave_dates.filter { (date) -> Bool in
        return CustomDateFormatter.campare(date, with: today)
    }
    print(greaterThanToday)

我通过使用堆栈溢出建议解决了我的问题。我正在发布我的答案,这可能会对其他人有所帮助

extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }

    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
    func generateDatesArrayBetweenTwoDates(startDate: Date , endDate:Date) ->[Date]
    {
        var datesArray: [Date] =  [Date]()
        var startDate = startDate
        let calendar = Calendar.current
        let fmt = DateFormatter()
        fmt.dateFormat = "dd-MM-YYYY"
        while startDate <= endDate {
            datesArray.append(startDate)
            startDate = calendar.date(byAdding: .day, value: 1, to: startDate)!
        }
        return datesArray
    }
}

这不是一个日期数组。这是一个字符串数组。
(NS)DateFormatter
为了执行
(NS)String
(NS)Date
。您的代码在哪里!!!是的,字符串数组。。这是输入错误@rmaddyth这是我在使用代码时遇到的错误---无法将类型为“(String)->Bool”的值转换为预期的参数类型“NSPredicate”@kishan此错误毫无意义。到目前为止您是如何尝试的我正在将日期数组分配给我的json数组(我从服务器数组中获取)
func dateList() {
        let startWeek = Date().startOfWeek
        let endWeek = Date().endOfWeek
        datesBetweenArray = Date().generateDatesArrayBetweenTwoDates(startDate: startWeek! , endDate: endWeek!) as NSArray
        print(datesBetweenArray)
}