名簿の連絡先のいずれかが今後10日以内に誕生日を迎えるかどうかを計算しようとしています。日付を比較するためのコードはたくさんありますが、私は日と月だけを比較したいと思います。たとえば、連絡先が1960年5月1日に生まれた場合(そして今日が2011年4月24日であると仮定した場合)、誕生日まで6日しかないことを計算したいだけです。感謝します。
3 に答える
4
誕生日を今年(または誕生日がすでに今年にあった場合は来年)に変更し、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]);
于 2011-04-24T17:58:59.590 に答える
0
連絡先の誕生日を取得したら、次のようにします。
年コンポーネントを調整する必要があります。
次に、彼女の誕生日までの日数を計算できます。
于 2011-04-24T17:55:36.047 に答える
0
連絡先で以下のNSDate関数を使用してくださいNSDate
。
- (NSTimeInterval)timeIntervalSinceNow
上記の関数は、受信者と現在の日付と時刻の間の間隔を返します。
NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];
NSTimeInterval
秒単位の経過時間です(浮動小数点数として表されます)。次に、86400で除算します。これは、1日の秒数であり、最も近い整数に丸められます。
NSInteger days = interval / 86400;
今、あなたは日数を持っています...
編集:
NSCalendar
とNSDateComponents
を使用して、2つの日付の間の日コンポーネントのみを取得することもできます。
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
以下のコードを参考にしてください。(NSCalendarのAppleドキュメントから取得)
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
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];
于 2011-04-24T18:07:55.913 に答える