2 つの日付の間の日数を取得しようとしていますが、ロジックは幅広い日付 (2012 年 8 月 12 日から 2013 年 8 月 12 日など) で正常に動作するようです。終了日を含めると 364 日、365 日が返されます。計算で。ただし、2013 年 8 月 8 日から 2013 年 8 月 12 日を差し込むと 0、または計算に終了日を追加すると 1 になります。ここで何が間違っているのかわかりません:
NSString* strNow = @"August 12, 2013";
NSString* strThen = @"August 8, 2012";
NSString* strNumOfDays = [dateManager getDateDifference:strThen :strNow];
方法
- (NSString*) getDateDifference : (NSString*) startDate : (NSString*) endDate {
//convert strings to dates
NSDate* dateStart = [self convertStringToDate:startDate];
NSDate* dateEnd = [self convertStringToDate:endDate];
//check to make sure the second date is later than the first
//get the number of days between
NSCalendar* gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* components = [gregorianCalendar components:NSDayCalendarUnit fromDate:dateStart toDate:dateEnd options:0];
//the plus one is for including the endDate in the count
return [NSString stringWithFormat:@"%i", [components day]+1];
}
文字列を日付メソッドに変換する
- (NSDate*) convertStringToDate : (NSString*) strToConvert {
NSError* error = nil;
NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeDate error:&error];
NSArray* arrDateMatches = [detector matchesInString:strToConvert options:0 range:NSMakeRange(0, [strToConvert length])];
for (NSTextCheckingResult* match in arrDateMatches) {
strToConvert = [self convertDateToString:match.date];
}
NSDate* myDate = [dateFormatter dateFromString:strToConvert];
return myDate;
}
@Wain - 変換は期待どおりに機能しています。@Rob - 日付がどの形式で送信されるかわからないため、NSTextCheckingTypes を使用しています - 2013 年 8 月 12 日、2013 年 8 月 8 日、2013 8 12 などの可能性があります。