Iphone 是我的联系人';再过10天她就生日了

Iphone 是我的联系人';再过10天她就生日了,iphone,sdk,nsdate,date,nscalendar,Iphone,Sdk,Nsdate,Date,Nscalendar,我正在计算我的通讯录中是否有联系人在未来10天内过生日。在线上有很多代码可以比较日期,但我只想比较日期和月份。例如,如果一个联系人出生于1960年1月5日(假设今天是2011年4月24日),那么我只想计算一下,离他们的生日只有六天了。谢谢你的帮助 检索联系人的生日后: 您需要调整年份组件: 然后,您可以计算到她生日的天数: 检索联系人的出生日期后: 您需要调整年份组件: 然后,您可以计算到她生日的天数: 将生日更改为今年(如果生日已经在今年,则更改为明年),并使用NSDATE组件和NSC

我正在计算我的通讯录中是否有联系人在未来10天内过生日。在线上有很多代码可以比较日期,但我只想比较日期和月份。例如,如果一个联系人出生于1960年1月5日(假设今天是2011年4月24日),那么我只想计算一下,离他们的生日只有六天了。谢谢你的帮助

检索联系人的生日后:

您需要调整年份组件:

然后,您可以计算到她生日的天数:


检索联系人的出生日期后:

您需要调整年份组件:

然后,您可以计算到她生日的天数:


将生日更改为今年(如果生日已经在今年,则更改为明年),并使用NSDATE组件和NSCalendar进行计算

看起来有点复杂,但你可以这样做:

NSDate *birthDay = ... // [calendar dateFromComponents:myBirthDay];

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *thisYearComponents = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *birthDayComponents = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];

NSDate *birthDayThisYear = [calendar dateFromComponents:birthDayComponents];

NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
if ([difference day] < 0) {
    // this years birthday is already over. calculate distance to next years birthday
    [birthDayComponents setYear:[thisYearComponents year]+1];
    birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
    difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
}


NSLog(@"%i days until birthday", [difference day]);
NSDate*生日=…//[日历日期组件:我的生日];
NSCalendar*calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDateComponents*thisYearComponents=[calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents*birthDayComponents=[日历组件:NSMonthCalendarUnit | NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate*birthdaythisnear=[日历日期fromComponents:birthDayComponents];
NSDateComponents*差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
如果([差异日]<0){
//今年的生日已经过去了。计算一下到明年生日的距离
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear=[CalendarDateFromComponents:birthDayComponents];
差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
}
NSLog(@“%i天到生日,[差异日]);

将生日更改为今年(如果生日已在今年,则更改为明年),并使用NSDateComponents和NSCalendar进行计算

看起来有点复杂,但你可以这样做:

NSDate *birthDay = ... // [calendar dateFromComponents:myBirthDay];

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *thisYearComponents = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *birthDayComponents = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];

NSDate *birthDayThisYear = [calendar dateFromComponents:birthDayComponents];

NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
if ([difference day] < 0) {
    // this years birthday is already over. calculate distance to next years birthday
    [birthDayComponents setYear:[thisYearComponents year]+1];
    birthDayThisYear = [calendar dateFromComponents:birthDayComponents];
    difference = [calendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:birthDayThisYear options:0];
}


NSLog(@"%i days until birthday", [difference day]);
NSDate*生日=…//[日历日期组件:我的生日];
NSCalendar*calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]自动释放];
NSDateComponents*thisYearComponents=[calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents*birthDayComponents=[日历组件:NSMonthCalendarUnit | NSDayCalendarUnit fromDate:birthDay];
[birthDayComponents setYear:[thisYearComponents year]];
NSDate*birthdaythisnear=[日历日期fromComponents:birthDayComponents];
NSDateComponents*差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
如果([差异日]<0){
//今年的生日已经过去了。计算一下到明年生日的距离
[birthDayComponents setYear:[thisYearComponents year]+1];
birthDayThisYear=[CalendarDateFromComponents:birthDayComponents];
差异=[calendar components:NSDayCalendarUnit fromDate:[NSDate date]toDate:birthDayThisYear选项:0];
}
NSLog(@“%i天到生日,[差异日]);

对您的联系人使用以下NSDate功能
NSDate

- (NSTimeInterval)timeIntervalSinceNow
上述函数返回接收器与当前日期和时间之间的间隔。

   NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];
NSTimeInterval
是以秒为单位的运行时间(以浮点数表示)。然后你可以除以86400,这是一天中的秒数,然后四舍五入到最接近的整数

NSInteger days = interval / 86400;
现在你有多少天了

编辑:

您还可以使用
NSCalendar
NSDateComponents
仅获取两个日期之间的日期组件

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
使用以下代码作为参考。()


对您的联系人使用以下NSDate功能
NSDate

- (NSTimeInterval)timeIntervalSinceNow
上述函数返回接收器与当前日期和时间之间的间隔。

   NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];
NSTimeInterval
是以秒为单位的运行时间(以浮点数表示)。然后你可以除以86400,这是一天中的秒数,然后四舍五入到最接近的整数

NSInteger days = interval / 86400;
现在你有多少天了

编辑:

您还可以使用
NSCalendar
NSDateComponents
仅获取两个日期之间的日期组件

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
使用以下代码作为参考。()


好极了谢谢你。这很好用。谁会想到这么简单的事情需要这么多的工作。如果你想把它做好,所有与日期相关的事情都需要大量的代码。这就是为什么在时区、夏令时、闰年等方面存在如此多的bug。(是的,我看了你86400个用户。)我们可以很高兴我们有了NSDateComponents和NSCalendar,否则你可能需要20倍的代码。哦,顺便说一句,不要删除
if([difference day]<0)
部分,即使你认为你对未来几年的生日不感兴趣。事实上,至少在一年的最后10天,你对一年前10天的生日感兴趣。我花了点时间才弄明白。太棒了!谢谢你。这很好用。谁会想到这么简单的事情需要这么多的工作。如果你想把它做好,所有与日期相关的事情都需要大量的代码。这就是为什么在时区、夏令时、闰年等方面存在如此多的bug。(是的,我看了你86400个用户。)我们可以很高兴我们有了NSDateComponents和NSCalendar,否则你可能需要20倍的代码。哦,顺便说一句,如果([差异日]<0),不要删除
)<