简体   繁体   English

如何从 Swift 中的数组中获取最新日期

[英]How to get the latest date from array in Swift

I have an array of dates.我有一系列日期。 I need to find the latest one.我需要找到最新的。 Can someone show me an example?有人可以给我看一个例子吗?

You can make NSDate conform to Comparable , as shown here您可以使NSDate符合Comparable ,如下所示

Given this, you can then use maxElement to find the maximum (ie the latest).鉴于此,您可以使用maxElement找到最大值(即最新的)。

import Foundation

extension NSDate: Comparable { }

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.isEqualToDate(rhs)
}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedAscending
}

let dates = [NSDate(), NSDate()]

let maxDate = maxElement(dates)

Note, maxElements goes bang for empty arrays so you may want to guard it with isEmpty :注意, maxElements对空数组很有效,所以你可能想用isEmpty保护它:

let maxDate = dates.isEmpty ? nil : Optional(maxElement(dates))

Or, if you don't want to go the extension route:或者,如果您不想走扩展路线:

if let fst = dates.first {
    let maxDate = dropFirst(dates).reduce(fst) {
        $0.laterDate($1)
    }
}

or, to return an optional:或者,返回一个可选的:

let maxDate = dates.reduce(nil) {
  (lhs: NSDate?, rhs: NSDate?)->NSDate? in
    lhs.flatMap({rhs?.laterDate($0)}) ?? rhs
}

You can make use of reduce :您可以使用reduce

guard let dates = dates, !dates.isEmpty else { return nil }
dates.reduce(Date.distantPast) { $0 > $1 ? $0 : $1 }

Edit: Handle empty or nil array编辑:处理空数组或 nil 数组

Swift has Array methods for getting both the min and max values for dates. Swift 有 Array 方法来获取日期的最小值和最大值。

You can use the following:您可以使用以下内容:

  • let maxDate = myArrayOfDates.max()
  • let minDate = myArrayOfDates.min()

So if you have an array of dates like so:因此,如果您有这样的日期数组: 在此处输入图像描述

And here is the code if you want to copy it:如果你想复制它,这里是代码:

let now = Date()

let dates = [
    now,
    now.addingTimeInterval(120),
    now.addingTimeInterval(60)
]

let sut = dates.max()
print(sut!)

Hope this helps someone!希望这对某人有帮助!

Run this in your playground在你的操场上运行这个

 var dates = [NSDate]() let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy" let date1 = dateFormatter.dateFromString("02-06-1987") let date2 = dateFormatter.dateFromString("02-06-2001") let date3 = dateFormatter.dateFromString("02-06-2010") //var date1 = NSDate() dates.append(date3!) dates.append(date1!) dates.append(date2!) var maxDate = dates[0] for i in 0...dates.count-1 { if(maxDate.compare(dates[i]).rawValue == -1){ maxDate = dates[i] println(maxDate) } println(maxDate) } println(maxDate.description)

have a good day :)祝你有美好的一天 :)

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

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