Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 两个日期之间的月数和天数_Objective C_Ios_Nsdate - Fatal编程技术网

Objective c 两个日期之间的月数和天数

Objective c 两个日期之间的月数和天数,objective-c,ios,nsdate,Objective C,Ios,Nsdate,我想计算两个日期之间的月数和天数。我的天数计算正确,但如何将其转换为月份和剩余天数 这就是我用来计算总天数的方法,它工作正常 - (NSInteger) numberOfDaysUntil { NSDate *fromDate; NSDate *toDate; NSCalendar *calendar = [NSCalendar currentCalendar]; [calendar rangeOfUnit:NSDayCalendarUnit startDat

我想计算两个日期之间的月数和天数。我的天数计算正确,但如何将其转换为月份和剩余天数

这就是我用来计算总天数的方法,它工作正常

- (NSInteger) numberOfDaysUntil {
    NSDate *fromDate;
    NSDate *toDate;

    NSCalendar *calendar = [NSCalendar currentCalendar];

    [calendar rangeOfUnit:NSDayCalendarUnit startDate:&fromDate interval:NULL forDate:[self dateOnly:[NSDate date]]];
    [calendar rangeOfUnit:NSDayCalendarUnit startDate:&toDate interval:NULL forDate:[self dateOnly:self]];

    NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:fromDate toDate:toDate options:0];
    return [difference day];
}
如前所述,在大多数日历中,无法将天数转换为月/日

但是,如果您同意苹果的实施,则
NSCalendar
方法
组件:fromDate:toDate:options:
可以进行此计算。从文件中:

如果没有足够小的单位来保持差分的全部精度,则结果是有损的。有些操作可能是不明确的,并且计算行为是特定于日历的,但通常较大的组件将在较小的组件之前计算;例如,在公历中,结果可能是1个月5天,而不是0个月35天

文档中的讨论甚至包括针对您的问题的示例代码:

NSDate *startDate = ...;
NSDate *endDate = ...;
unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [gregorian components:unitFlags fromDate:startDate  toDate:endDate  options:0];
int months = [comps month];
int days = [comps day];

您无法将日间隔(与其开始/结束值无关)转换为月/日,因为公历没有等长的月。也许您可以重新说明您的需要。说是1月15日到2月3日。是一个月零三天吗?热舔在大约相等长度的几个月内死亡。这对我来说是完美的。谢谢!