0

状況: 要するに、サッカーのスケジュールがあります。スケジュールの次の試合日のみ詳細情報を提供するカスタム セルを使用したいと思います。

問題: スケジュール内で次に近いゲームのみを見つけるにはどうすればよいですか (iOS の場合)?

「Solutions to Common Date and Time Issues」の WWDC 2013 ビデオを見ましたが、これは主に Mac に当てはまります。ここで多数の投稿を検索しましたが、いくつかは近いですが、スケジュールの日付のリストから次の日付のみを見つける必要があるものではありません. 他の投稿から、2 つの特定の日付を比較できる場所がわかりますが、これは私がやりたいことではありません。日付のリストから、今日以降で最も近い日付を見つけたいです。

これが私が今いる場所です。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{   
//Populate the table from the plist
NSDictionary *season = _schedContentArray[indexPath.section];
NSArray *schedule = season[@"Schedule"];  
NSDictionary *game = schedule[indexPath.row];

//find the closest game date after today's date ??
NSString *gameDateStr = game[@"GameDate"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.calendar=calendar;
[dateFormatter setDateFormat:@"MM/dd/yy"];
NSDate *today = [NSDate date];
NSDate *gameDate = [dateFormatter dateFromString:gameDateStr];
//NSString *nextGame =
NSLog(@"game date is %@",gameDate);

NSLog は試合の日付を返します (オープン日を除く): 2013-11-11 16:10:05.979 Clemson Football[24060:70b] game date is 2013-08-31 04:00:00 +0000 2013-11- 11 16:10:05.982 Clemson Football[24060:70b] の試合日は 2013-09-07 04:00:00 +0000 2013-11-11 16:10:05.985 Clemson Football[24060:70b] の試合日は (null ) 2013-11-11 16:10:05.987 クレムソン フットボール[24060:70b] 試合日は 2013-09-19 04:00:00 +0000 2013-11-11 16:10:05.988 クレムソン フットボール[24060:70b]試合日は 2013-09-28 04:00:00 +0000 2013-11-11 16:10:05.990 Clemson Football[24060:70b] 試合日は 2013-10-05 04:00:00 +0000 2013-11 -11 16:10:05.992 Clemson Football[24060:70b] 試合日は 2013-10-12 04:00:00 +0000 2013-11-11 16:10:05.993 Clemson Football[24060:70b] 試合日は 2013 -10-19 04:00:00 +0000 2013-11-11 16:10:05.995 Clemson Football[24060:70b] 試合日は 2013-10-26 04:00:00 +0000 2013-11-11 16:10:05.996 Clemson Football[24060:70b] 試合日は 2013-11-02 04:00:00 +0000 2013-11-11 16:10:05.998 Clemson Football[24060: 70b] 試合日は 2013-11-09 05:00:00 +0000 2013-11-11 16:10:06.000 Clemson Football[24060:70b] 試合日は 2013-11-14 05:00:00 +0000 2013 -11-11 16:10:06.001 Clemson Football[24060:70b] 試合日は 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 Clemson Football[24060:70b] 試合日は 2013-11-30 05:00:00 +0000 2013-11-11 16:10:06.005 Clemson Football[24060:70b] 試合日は 2013-12-07 05:00:00 +0000 です001 Clemson Football[24060:70b] の試合日は 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 Clemson Football[24060:70b] の試合日は 2013-11-30 05: 00:00 +0000 2013-11-11 16:10:06.005 Clemson Football[24060:70b] 試合日は 2013-12-07 05:00:00 +0000001 Clemson Football[24060:70b] の試合日は 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 Clemson Football[24060:70b] の試合日は 2013-11-30 05: 00:00 +0000 2013-11-11 16:10:06.005 Clemson Football[24060:70b] 試合日は 2013-12-07 05:00:00 +0000

どうぞよろしくお願いいたします。これは単純であるように思えますが、かなりイライラしています。追加情報が必要な場合はお知らせください。

4

2 に答える 2

4

[NSDate timeIntervalSinceNow]リストの日付で使用し、値が最も小さい日付を見つけます。

コードは次のようになります (テストされていません)。

NSArray *dates = ... // your list of dates
NSDate *closestDate = nil;
for(NSDate *date in dates) {
    if(([date timeIntervalSinceNow] < 0) {
         // the date is in the past
         continue;
    }
    if([date timeIntervalSinceNow] < [closestDate timeIntervalSinceNow] || !closestDate) {
        closestDate = date;
    }
}
于 2013-11-11T21:49:57.953 に答える
0

基準日があり、セットから今日から最も近い日付を取得しようとすると、日付を時間間隔に変換して最小値を取得します。

   [[NSDate date] timeIntervalSinceDate:referenceDate];
于 2013-11-11T21:51:37.550 に答える