Цель C-вычисление количества дней между двумя датами


Возможные Дубликаты:
как я могу сравнить две даты, вернуть несколько дней.

у меня есть две даты (как NSString в виде "гггг-ММ-ДД"), например:

NSString *start = "2010-11-01";
NSString *end = "2010-12-01";

Я хотел бы реализовать:

- (int)numberOfDaysBetween:(NSString *)startDate and:(NSString *)endDate {

}

спасибо!

6   51  

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;

}