Цель C-вычисление количества дней между двумя датами
Возможные Дубликаты:
как я могу сравнить две даты, вернуть несколько дней.
у меня есть две даты (как NSString в виде "гггг-ММ-ДД"), например:
NSString *start = "2010-11-01";
NSString *end = "2010-12-01";
Я хотел бы реализовать:
- (int)numberOfDaysBetween:(NSString *)startDate and:(NSString *)endDate {
}
спасибо!
6 ответов:
NSString *start = @"2010-09-01"; NSString *end = @"2010-12-01"; NSDateFormatter *f = [[NSDateFormatter alloc] init]; [f setDateFormat:@"yyyy-MM-dd"]; NSDate *startDate = [f dateFromString:start]; NSDate *endDate = [f dateFromString:end]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0];
components
теперь держит разницу.NSLog(@"%ld", [components day]);
существует целое руководство по дате и времени программирования. Вот это соответствующий раздел что дает вам подсказку о том, что делать.
Это пример кода в вопрос.
попробуйте написать что-то на основе этого, а затем вернуться, если у вас есть конкретные вопросы.
Edit
- ладно. Вот как я бы написал код в основные.
во-первых, я бы продлил NSDate.
заголовочный файл:
// NSDate+ADNExtensions.h #import <Cocoa/Cocoa.h> @interface NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate; @end
файл реализации:
// NSDate+ADNExtensions.m #import "NSDate+ADNExtensions.h" @implementation NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate { NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit fromDate:self toDate:aDate options:0]; return [components day]; } @end
Это очень грубый код. Нет никакой проверки ошибок или проверки того, что вторая дата позже первой.
и тогда я бы использовал его так (работает на 64-битной среде сбора мусора):
NSDate *startDate = [NSDate dateWithString:@"2010-11-01 00:00:00 +0000"]; NSDate *endDate = [NSDate dateWithString:@"2010-11-02 00:00:00 +0000"]; NSInteger difference = [startDate numberOfDaysUntil:endDate]; NSLog(@"Diff = %ld", difference);
Это такой позор, потому что вы бы узнали намного больше, разместив свой код и неправильные выводы и получив больше конкретная помощь. Но если вы просто хотите быть программистом вырезания и вставки; возьмите этот код и удачи вам.
этот код, кажется, хорошо работает в Swift 2:
func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int { let calendar = NSCalendar.currentCalendar() let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: []) return components.day }
ObjC Код:
NSDateComponents *dateComponent = [calender components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0];
результат:
int totalDays = (int)dateComponent.day;
Swift 3:
let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" let start = formatter.date(from: "2010-09-01")! let end = formatter.date(from: "2010-12-01")! let days = Calendar.current.dateComponents([.day], from: start, to: end).day!
реализация Swift 4
вызов метода :
let numberOfDays = daysBetweenDates(startDate: fileCreatedDate,endDate: date)
Способ Реализации:
func daysBetweenDates(startDate: Date, endDate: Date) -> Int { let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate) print(daysBetween.day!) return daysBetween.day! }
реализация цели C:
Вызов Метода:
int numberOfDaysSinceFileCreation = [self daysBetweenDates: fileCreatedDate currentDate: today];
Способ Реализации:
- (int) daysBetweenDates: (NSDate *)startDate currentDate: (NSDate *)endDate { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0]; int totalDays = (int)dateComponent.day; return totalDays; }