私はStackoverflowで多くの検索を行いましたが、私の問題の答えは見つかりませんでした。すべてのイベントのフィルタ配列とどのイベントがまだ進行中であるかを確認
私はアプリを開発しており、いくつかのイベントでJSONデータを取得しています。私が得るのは、イベントの開始時間とイベントの継続時間です。すべてのデータはStringとして記録されます。
アプリの1つの画面で、現在進行中のイベントのみを表示したいと考えています。例えば
:
Class Event {
var startTime: String?
var duration: String?
}
let event1 = Event()
event1.starTime = "12-12-2016, 10:50 AM"
event1.duration = "50min"
let event2 = Event()
event2.starTime = "12-12-2016, 09:50 AM"
event2.duration = "40min"
let event3 = Event()
event3.starTime = "12-12-2016, 10:10 AM"
event3.duration = "90min"
let allEvents = [event1, event2, event3]
11:00 AM、現在の日付と時刻が2016年12月12日であるとしましょう。私たちが現在の日付と比較すると、それでも起こっているすべてのイベントのフィルタリング/検索はできますか?
ありがとうございます。
EDIT:私のソリューション
私はたstartDateに日付ストリングとdurationStringを変換するための方法を作成しました:日付とendDateには:日、私は分離法を作成したフィルタリングのために
static func convertDateStringAndDurationStringToStartAndEndDate(date: String, duration: String) -> (start: Date, end: Date)? { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" guard let startDate = dateFormatter.date(from: date) else { return nil } guard let duration = Int(duration) else { return nil } // recived interval is in minutes, time interval must be calculated in seconds let timeInterval = TimeInterval(Int(duration) * 60) let endDate = Date(timeInterval: timeInterval, since: startDate) return (startDate, endDate) }
。私の場合、私はRealmデータベースを使用していますが、あなたはその点を得るでしょう。
static func filterResultsForNowPlaying(results: Results<Show>?) -> Results<Show>? { let currentDate = NSDate() let datePredicate = NSPredicate(format: "startDate <= %@ AND %@ <= endDate", currentDate, currentDate) let filteredShows = results?.filter(datePredicate) return filteredShows }
あなたがののように日付を保存ドンなぜ:あなたはEventクラスを変更する機能を持っている場合は、同じことを行いDateIntervalクラス、とあなたのEventクラスを置き換える場合
、あなたは大幅にコードを簡素化することができます「日付」? –
"startTime"をDateオブジェクトとして保存する方法は知っていますが、私の場合はdurationを使用する方法がわかりません。 – Excalibur
あなたの 'duration'フィールドには常に「* min」形式がありますが、「min」挿入を削除してintに変換することができます –