【问题标题】:How to compare array of dates with greater than current date如何比较日期数组与大于当前日期
【发布时间】:2017-09-22 06:01:36
【问题描述】:

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

"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"
    ],

【问题讨论】:

  • 这不是日期数组。那是一个字符串数组。
  • (NS)DateFormatter 为了做(NS)String (NS)Date.
  • 你试过的代码在哪里!!!
  • 是的字符串数组..这是拼写错误@rmaddy

标签: ios arrays swift string nsdate


【解决方案1】:

首先,您需要将string date 转换为Date 对象,您可以使用DateFormatter 来完成此操作。然后您可以使用filter 来检查日期是否大于今天:

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"]

【讨论】:

  • 这是我在使用您的代码时遇到的错误 --- 无法将类型 '(String) -> Bool' 的值转换为预期的参数类型 'NSPredicate'
  • @kishan 这个错误没有意义。到目前为止你是如何尝试的
  • 我正在将日期数组分配给我的 json 数组(我从服务器数组获取)
【解决方案2】:

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

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)

【讨论】:

    【解决方案3】:

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

    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
        }
    }
    

    我正在使用这样的功能。

    func dateList() {
            let startWeek = Date().startOfWeek
            let endWeek = Date().endOfWeek
            datesBetweenArray = Date().generateDatesArrayBetweenTwoDates(startDate: startWeek! , endDate: endWeek!) as NSArray
            print(datesBetweenArray)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2013-01-04
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多