1

名簿の連絡先のいずれかが今後10日以内に誕生日を迎えるかどうかを計算しようとしています。日付を比較するためのコードはたくさんありますが、私は日と月だけを比較したいと思います。たとえば、連絡先が1960年5月1日に生まれた場合(そして今日が2011年4月24日であると仮定した場合)、誕生日まで6日しかないことを計算したいだけです。感謝します。

4

3 に答える 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

連絡先の誕生日を取得したら、次のようにします。

ABAddressBookは誕生日プロパティを取得します

年コンポーネントを調整する必要があります。

NSDate-年の値を変更する

次に、彼女の誕生日までの日数を計算できます。

NSDateカウントダウン(日数)

于 2011-04-24T17:55:36.047 に答える
0

連絡先で以下のNSDate関数を使用してくださいNSDate

- (NSTimeInterval)timeIntervalSinceNow

上記の関数は、受信者と現在の日付と時刻の間の間隔を返します。

   NSTimeInterval interval = [date1 timeIntervalSinceNow:myContactDate];

NSTimeInterval秒単位の経過時間です(浮動小数点数として表されます)。次に、86400で除算します。これは、1日の秒数であり、最も近い整数に丸められます。

NSInteger days = interval / 86400;

今、あなたは日数を持っています...

編集:

NSCalendarNSDateComponents を使用して、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 に答える