0

イベントの日付を確認する必要があります。これは、現在の日付から60日後の日付である必要があります。以下のコードを使用していますが、正しく動作していません。サーバーから「2012-04-14T16:50:02Z」のようなイベント文字列を取得していることに注意してください。

    // current date
double currDateInMilliSecs = [NSDate timeIntervalSinceReferenceDate] * 1000;    
NSLog(@"currDateInMilliSecs: %f", currDateInMilliSecs);

// sixty days
double sixtydaysvalue = 60.0 * 24.0 * 3600.0 * 1000.0;
NSLog(@"sixtydaysvalue: %f", sixtydaysvalue);
// add current date + sixt days
double sixtyDaysMilliSecsFromCurrDate = currDateInMilliSecs + sixtydaysvalue;
NSLog(@"sixtyDaysMilliSecsFromCurrDate: %f", sixtyDaysMilliSecsFromCurrDate);

// check does the event date between current date + 60 days
NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
//[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

// [eventDict objectForKey:@"begin_at"] gives date string like this "2012-04-14T16:50:02Z"  for ex.
NSDate *eventdate = [df dateFromString:[eventDict objectForKey:@"begin_at"]];

NSTimeInterval nowSinceEventDate = [eventdate timeIntervalSince1970];
NSLog(@"nowSinceEventDate: %f", nowSinceEventDate);
double eventDateInMilliSecs = nowSinceEventDate * 1000;
NSLog(@"eventDateInMilliSecs: %f", eventDateInMilliSecs);

// this is not working as expected    
if ( eventDateInMilliSecs<sixtyDaysMilliSecsFromCurrDate && eventDateInMilliSecs>currDateInMilliSecs )
{


}
else
{
}
4

2 に答える 2

2

これをJavaであるかのように解決しようとしていますが、そうではありません。代わりに、CocoaTouchフレームワークのものを使用してみてください。計算はかなり単純なので、日付を使用して計算できますが、NSCalendarとNSDateComponentsを使用すると、より複雑な計算を非常に簡単に実行できます。

問題の簡単な解決策(ここでeventdateは、フォーマッターを使用して作成した日付を想定しています):

NSDate* now = [NSDate date];
NSDate* sixtyDaysFromNow = [now dateByAddingTimeInterval:(60 * 60 * 24 * 60)];
if( [eventDate earlierDate:now] == now && [eventDate laterDate:sixtyDaysFromNow] == sixtyDaysFromNow ) {
  // the event date is within scope
} else {
  // the event date is outside stop
}
于 2012-04-19T13:21:15.190 に答える
0

私の関数を使用して、プロジェクトでの作業日を比較します

お役に立てば幸いです

-(BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endingDate

{

    if ([date compare:beginDate] == NSOrderedAscending)
        return NO;

    if ([date compare:endingDate] == NSOrderedDescending) 
        return NO;

    return YES;
}
于 2012-04-19T13:15:28.113 に答える