7

NSDates の並べ替えられた配列があります。現在の日付に最も近い日付を配列内で見つける方法を教えてもらえますか?

テーブルビューでその日付にスクロールできるように、最も近い日付のインデックスを取得する必要があります。

たとえば、2013 年 1 月 1 日、2013 年 1 月 6 日、2013 年 1 月 9 日、2013 年 1 月 10 日があるとします。2013 年 1 月 6 日のインデックスが必要です。

それが理にかなっていることを願っています。助けてくれてありがとう。

アップデート:

私はこれを試しています:

    NSTimeInterval interval = 0;
    NSUInteger indexOfDate;
    for (NSDate * date in m_arEventsSorted)
    {               
        if(abs([date timeIntervalSinceDate:[NSDate date]]) < interval)
        {
            interval = abs([date timeIntervalSinceDate:[NSDate date]]);
            indexOfDate = [m_arEventsSorted indexOfObject:date];
        }
    }
4

5 に答える 5

7

NSDate(a 'd )を返すtimeIntervalSinceNow( reference ) メソッドを提供します。この関数を使用して、各日付と現在の最小の差を見つけるだけです。NSTimeIntervaltypedefdoublefabs()

于 2013-01-07T11:25:11.327 に答える
2

timeIntervalSinceDate: 関数をお勧めします。このようなもの (コードはテストされていません!):

NSDate *currentDate = [NSDate date];
double min = [currentDate timeIntervalSinceDate:[array objectAtIndex:0]];
int minIndex = 0;
for (int i = 1; i < [array count]; ++i)
{
     double currentmin = [currentDate timeIntervalSinceDate:[array objectAtIndex:i]];
     if (currentmin < min) {
           min = currentmin;
           minIndex = i;
     }
}

minIndex から最も近いインデックスを取得できます。

于 2013-01-07T11:29:46.160 に答える
1

これはうまくいくはずです:

NSDate *closestDate;
for( NSDate *tempDate in dates ){
    NSInteger tempDateInterval = [tempDate timeIntervalSinceNow];
    //to work with positive and negative time difference
    if( tempDateInterval < 0 ){
        tempDateInterval *= -1;
    }
    NSInteger closestDateInterval = [closestDate timeIntervalSinceNow];
    if( closestDateInterval < 0 ){
        closestDateInterval *= -1;
    }
    if( tempDateInterval < closestDateInterval ){
        closestDate = tempDate;
    }
}
于 2013-01-07T11:29:01.090 に答える
0

猫の皮を剥ぐ方法はたくさんあると思いますが、私の個人的なお気に入りの皮剥ぎメカニズムは、日付をエポック時間に変換することです。これにより、オレンジとオレンジを比較し、日付を秒単位で比較していることがわかります。これにより、タイムゾーンの問題も解消されます。

日付に最も近い時刻を選択していることを確認する必要がある場合は、時刻の 00:00:01 と 23:59:59 で日付をテストし、最小の結果を使用する必要がある場合があります。

使用する

long secondsToDate = [date timeIntervalSince1970];
于 2013-01-07T11:29:27.893 に答える