显示空值时的日期比较

Date comparison in showing null

我有两个这样的约会,

NSString *givendate = @"2016-10-07T13:01:20";
NSDate *currentDateTime = [NSDate date];

我想通过比较当前日期和给定日期来计算天数,例如 5 天或 6 天。

我尝试了以下代码。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFromString = [dateFormatter dateFromString:givendate];
NSTimeInterval diff = [currentDateTime timeIntervalSinceDate:dateFromString];
NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
cell.days.text=intervalString;

但它打印 "nan"。任何帮助将不胜感激。

我不确定,但可能是因为您没有设置日期格式:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; //According to date and time format;
dateFromString = [dateFormatter dateFromString:givendate];
NSTimeInterval diff = [currentDateTime timeIntervalSinceDate:dateFromString];
NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
cell.days.text=intervalString;

您必须根据下面的日期字符串为 NSDateFormatter 指定 dateFormat,否则它将 return nilnan:

    NSDate *dateFromString;

    NSString *givendate = @"2016-10-07T13:01:20";
    NSDate *currentDateTime = [NSDate date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];//Set format here accordingly
    dateFromString = [dateFormatter dateFromString:givendate];
    NSTimeInterval diff = [currentDateTime timeIntervalSinceDate:dateFromString];
    NSString *intervalString = [NSString stringWithFormat:@"%f", diff];

以上代码对我有用。

编辑:

int num_days = diff / (60 * 60 * 24);
int num_seconds -= num_days * (60 * 60 * 24);
int num_hours = num_seconds / (60 * 60);
int num_seconds -= num_hours * (60 * 60);
int num_minutes = num_seconds / 60;

像下面这样使用NSGregorianCalendar

    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];

    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSDateComponents *components = [gregorian components:unitFlags
                                            fromDate:dateFromString
                                              toDate:currentDateTime options:0];
    NSInteger years = [components year];
    NSInteger months = [components month];
    NSInteger days = [components day]; 
    NSLog(@"years = %ld months = %ld days = %ld",years,months,days);

对于"It prints 1050035.00 like this . But I need like 5 days or 6 days like that. Any help ?"

因为它returns以毫秒为单位,所以你需要把它转换成天。

NSCalendar *_calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSCalendarUnit _units = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *_components = [_calendar components:_units fromDate:[NSDate date] toDate:[NSDate dateWithTimeIntervalSinceNow:_timeInSeconds] options:kNilOptions];

NSLog(@"%ld Days, %ld Hours, %ld Minutes, %ld Seconds", _components.day, _components.hour, _components.minute, _components.second);

在您的情况下,输出:12 天 3 小时 40 分钟 35 秒