Saltar al contenido

Cálculo del número de días entre dos fechas en Objective-C

Siéntete libre de compartir nuestra web y códigos con otro, necesitamos de tu ayuda para aumentar esta comunidad.

Solución:

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 ahora tiene la diferencia.

NSLog(@"%ld", [components day]);

Hay una guía completa para la programación de fecha y hora. Aquí hay una sección relevante que le da una pista sobre qué hacer.

Es de donde proviene el código de ejemplo en la otra pregunta.

Intente escribir algo basado en eso y luego regrese si tiene preguntas específicas.

Editar

Bueno. Así es como escribiría el código en su forma más básica.

Primero, extendería NSDate.

El archivo de cabecera:

//  NSDate+ADNExtensions.h

#import 


@interface NSDate (ADNExtensions)

- (NSInteger)numberOfDaysUntil:(NSDate *)aDate;

@end

El archivo de implementación:

//  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

Este es un código muy tosco. No hay error al comprobar o validar que la segunda fecha sea posterior a la primera.

Y luego lo usaría así (ejecutándose en un entorno de recolección de basura de 64 bits):

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);

Es una lástima, porque habría aprendido mucho más publicando su código y los resultados incorrectos y obteniendo ayuda más específica. Pero si solo quieres ser un programador de cortar y pegar; toma este código y buena suerte para ti.

Implementación Swift 4

Llamada al método:

let numberOfDays = daysBetweenDates(startDate: fileCreatedDate,endDate: date)

Implementación del método:

 func daysBetweenDates(startDate: Date, endDate: Date) -> Int 
        let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
        print(daysBetween.day!)
        return daysBetween.day!
  

Implementación del objetivo C:

Llamada de método:

int numberOfDaysSinceFileCreation = [self daysBetweenDates: fileCreatedDate
                                                                   currentDate: today];

Implementación del método:

- (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;


valoraciones y reseñas

Nos encantaría que puedieras recomendar esta sección si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *