Swift 『配列から現在時刻に一番近い時刻をString型で取ってくる』
こんばんわ!バスアプリを作った時に配列から現在時刻から一番近い時刻をString型で取ってくるというのに苦戦しました。
一番近いものだとマイナスの時刻。つまり現在時刻は11時45分で次の発車は12時だとしても、前の時刻が11時40分だと11時40分を取ってくるという訳で使い物にならないのでそこにも対応しております。笑
もし同じようなプログラム探していたりする人の役に立てれば光栄です。
一緒にアプリ作ったりする人募集しています!!
是非ここまでご連絡を!! ----> ht16a017@oecu.jp
本題のソースコードはこちらです!
func result1() -> String {
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HH:mm:ss"
let nowString = timeFormatter.string(from: NSDate() as Date)
let nowTime = timeFormatter.date(from: nowString)!
let jikokuArray: [(String, String)] = [("Next Bus AM","9:10:00"),("Next Bus AM","9:50:00"),("Next Bus AM","10:10:00"),("Next Bus AM","10:50:00"),("Next Bus AM","11:10:00"),("Next Bus AM","11:30:00"),("Next Bus AM","11:50:00"),("Next Bus PM","12:10:00"),("Next Bus PM","12:50:00"),("Next Bus PM","13:10:00"),("Next Bus PM","14:10:00"),("Next Bus PM","15:10:00"),("Next Bus PM","15:20:00"),("Next Bus PM","15:50:00"),("Next Bus PM","16:05:00"),("Next Bus PM","16:42:00"),("Next Bus PM","16:50:00"),("Next Bus PM","16:55:00"),("Next Bus PM","17:00:00"),("Next Bus PM","17:05:00"),("Next Bus PM","17:50:00"),("Next Bus PM","18:05:00"),("Next Bus PM","18:35:00"),("Next Bus PM","18:50:00"),("Next Bus PM","19:05:00"),("Next Bus PM","19:35:00"),("Next Bus PM","19:50:00"),("Next Bus PM","20:05:00"),("Next Bus PM","20:35:00"),("Next Bus PM","21:05:00")]
let resultArray: [(String, String)] = jikokuArray.flatMap({
let diff = timeFormatter.date(from: $0.1)
return nowTime.timeIntervalSince(diff ?? nowTime) > 0 ? nil : $0
})
if resultArray.count > 0, let result = resultArray.first {
return "\(result.0):\(result.1)"
} else {
//ここはダイヤ配列にその日の次の時刻がもう無い時に出力されます
return "本日のダイヤは終了しました。"
}
}