スウィフト3バージョン "出発15分後":
import UIKit
struct ArrivalDataContainer {
var date = Date()
var timeString = "00:00"
var currentMinuteDifference = 0
}
let currentDate = Date()
let unitFlags: Set = Set<Calendar.Component>([.day, .month, .year])
var components = NSCalendar.current.dateComponents(unitFlags, from: currentDate)
let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"]
var arrivalArray = [ArrivalDataContainer]()
for timeString in gateArray {
let timeAndMinutes = timeString.components(separatedBy: ":")
components.setValue(Int(timeAndMinutes[0])!, for: .hour)
components.setValue(Int(timeAndMinutes[1])!, for: .minute)
let newDate = NSCalendar.current.date(from: components)
let difference = NSCalendar.current.dateComponents(Set<Calendar.Component>([.minute]), from: currentDate, to: newDate!).minute
let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference!)
arrivalArray.append(dataContainer)
}
let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first
if let firstWithinSameDay = minimumPositiveDifference {
print("Departure in \(firstWithinSameDay.currentMinuteDifference) minute(s)")
}
else {
let largestNegativeDifference = arrivalArray.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first
print("Next departure \(largestNegativeDifference?.timeString)")
}
スイフト2バージョン起源でしたアル答え。
import UIKit
struct ArrivalDataContainer {
var date = NSDate()
var timeString = "00:00"
var currentMinuteDifference = 0
}
let currentDate = NSDate()
let unitFlags: NSCalendarUnit = [.Day, .Month, .Year]
let components = NSCalendar.currentCalendar().components(unitFlags, fromDate: currentDate)
let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"]
var arrivalArray = [ArrivalDataContainer]()
for timeString in gateArray {
let timeAndMinutes = timeString.componentsSeparatedByString(":")
components.setValue(Int(timeAndMinutes[0])!, forComponent: .Hour)
components.setValue(Int(timeAndMinutes[1])!, forComponent: .Minute)
let newDate = NSCalendar.currentCalendar().dateFromComponents(components)
let difference = NSCalendar.currentCalendar().components([.Minute], fromDate: currentDate, toDate: newDate!, options: []).minute
let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference)
arrivalArray.append(dataContainer)
}
let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sort({ $0.currentMinuteDifference < $1.currentMinuteDifference })[0].currentMinuteDifference
print("Departure in \(minimumPositiveDifference) minute(s)")
- は日
- Get times from string
- Get difference from current time and arrival dates
- として到着時間を表し
最小差とプリント出発間隔の文字列を選択してまだ最初のかどうかを把握する必要があります翌日が最も近い。それは、最もマイナスのわずかな差があるものかもしれません。