varias superponer studio modificar lineas graficos graficas ejes objective-c cocoa date date-comparison

objective-c - studio - superponer graficas en r



Cómo comparar dos fechas en Objective-C (14)

Tengo dos fechas: 2009-05-11 y la fecha actual. Quiero verificar si la fecha dada es la fecha actual o no. Cómo es esto posible.


..

NSString *date = @"2009-05-11" NSString *nowDate = [[[NSDate date]description]substringToIndex: 10]; if([date isEqualToString: nowDate]) { // your code }


Aquí amigo. Esta función coincidirá con su fecha con cualquier fecha especificada e indicará el tiempo que coinciden o no. También puede modificar los componentes para que coincidan con sus requisitos.

- (BOOL)isSameDay:(NSDate*)date1 otherDay:(NSDate*)date2 { NSCalendar* calendar = [NSCalendar currentCalendar]; unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1]; NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2]; return [comp1 day] == [comp2 day] && [comp1 month] == [comp2 month] && [comp1 year] == [comp2 year];}

Saludos, Naveed Butt


Aquí está la función de la respuesta de convertida a Swift si alguien más lo está buscando:

func isSameDate(#date1: NSDate, date2: NSDate) -> Bool { let calendar = NSCalendar() let date1comp = calendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date1) let date2comp = calendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date2) return (date1comp.year == date2comp.year) && (date1comp.month == date2comp.month) && (date1comp.day == date2comp.day) }


Aquí está la variante de Swift en la respuesta de Pascal:

extension NSDate { func isLaterThanOrEqualTo(date:NSDate) -> Bool { return !(self.compare(date) == NSComparisonResult.OrderedAscending) } func isEarlierThanOrEqualTo(date:NSDate) -> Bool { return !(self.compare(date) == NSComparisonResult.OrderedDescending) } func isLaterThan(date:NSDate) -> Bool { return (self.compare(date) == NSComparisonResult.OrderedDescending) } func isEarlierThan(date:NSDate) -> Bool { return (self.compare(date) == NSComparisonResult.OrderedAscending) } }

Que se puede usar como:

self.expireDate.isEarlierThanOrEqualTo(NSDate())



La mejor manera que encontré fue verificar la diferencia entre la fecha dada y hoy:

NSCalendar* calendar = [NSCalendar currentCalendar]; NSDate* now = [NSDate date]; int differenceInDays = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date] - [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:now];

De acuerdo con el Listado 13 de Cálculos calendáricos en la Guía de programación de fecha y hora de Apple [Ordenanalidad de NSCalendar: Unidad de calendario de NSDay enUnidad: NSEraCalendarUnit forDate: myDate] le da el número de personas desde el comienzo de la era. De esta manera, es fácil verificar si la fecha es ayer, hoy o mañana.

switch (differenceInDays) { case -1: dayString = @"Yesterday"; break; case 0: dayString = @"Today"; break; case 1: dayString = @"Tomorrow"; break; default: { NSDateFormatter* dayFormatter = [[NSDateFormatter alloc] init]; [dayFormatter setLocale:usLocale]; [dayFormatter setDateFormat:@"dd MMM"]; dayString = [dayFormatter stringFromDate: date]; break; } }


Lo que realmente necesitas es comparar dos objetos del mismo tipo.

  1. Crea un NSDate fuera de tu fecha de cadena (@ "2009-05-11"):

  2. Si la fecha actual también es una cadena, conviértala en NSDate. Si ya es un NSDate, déjalo.


Por este método también puedes comparar dos fechas

NSDate * dateOne = [NSDate date]; NSDate * dateTwo = [NSDate date]; if([dateOne compare:dateTwo] == NSOrderedAscending) { }


Si hace ambas fechas NSDate , puede usar NSDate ''s compare: method:

NSComparisonResult result = [Date2 compare:Date1]; if(result==NSOrderedAscending) NSLog(@"Date1 is in the future"); else if(result==NSOrderedDescending) NSLog(@"Date1 is in the past") else NSLog(@"Both dates are the same");

Puede echar un vistazo a los documentos here .


Cocoa tiene un par de métodos para esto :

en NSDate

– isEqualToDate: – earlierDate: – laterDate: – compare:

Cuando use - (NSComparisonResult)compare:(NSDate *)anotherDate , obtendrá uno de estos:

The receiver and anotherDate are exactly equal to each other, NSOrderedSame The receiver is later in time than anotherDate, NSOrderedDescending The receiver is earlier in time than anotherDate, NSOrderedAscending.

ejemplo:

NSDate * now = [NSDate date]; NSDate * mile = [[NSDate alloc] initWithString:@"2001-03-24 10:45:32 +0600"]; NSComparisonResult result = [now compare:mile]; NSLog(@"%@", now); NSLog(@"%@", mile); switch (result) { case NSOrderedAscending: NSLog(@"%@ is in future from %@", mile, now); break; case NSOrderedDescending: NSLog(@"%@ is in past from %@", mile, now); break; case NSOrderedSame: NSLog(@"%@ is the same as %@", mile, now); break; default: NSLog(@"erorr dates %@, %@", mile, now); break; } [mile release];


This categoría ofrece una forma clara de comparar NSDates:

#import <Foundation/Foundation.h> @interface NSDate (Compare) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date; -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date; -(BOOL) isLaterThan:(NSDate*)date; -(BOOL) isEarlierThan:(NSDate*)date; //- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API @end

Y la implementación:

#import "NSDate+Compare.h" @implementation NSDate (Compare) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrderedAscending); } -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrderedDescending); } -(BOOL) isLaterThan:(NSDate*)date { return ([self compare:date] == NSOrderedDescending); } -(BOOL) isEarlierThan:(NSDate*)date { return ([self compare:date] == NSOrderedAscending); } @end

Fácil de usar:

if([aDateYouWantToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now { // do your thing ... }


Get Today''s Date: NSDate* date = [NSDate date]; Create a Date From Scratch: NSDateComponents* comps = [[NSDateComponents alloc]init]; comps.year = 2015; comps.month = 12; comps.day = 31; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDate* date = [calendar dateFromComponents:comps]; Add a day to a Date: NSDate* date = [NSDate date]; NSDateComponents* comps = [[NSDateComponents alloc]init]; comps.day = 1; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDate* tomorrow = [calendar dateByAddingComponents:comps toDate:date options:nil]; Subtract a day from a Date: NSDate* date = [NSDate date]; NSDateComponents* comps = [[NSDateComponents alloc]init]; comps.day = -1; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDate* yesterday = [calendar dateByAddingComponents:comps toDate:date options:nil]; Convert a Date to a String: NSDate* date = [NSDate date]; NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; formatter.dateFormat = @"MMMM dd, yyyy"; NSString* dateString = [formatter stringFromDate:date]; Convert a String to a Date: NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; formatter.dateFormat = @"MMMM dd, yyyy"; NSDate* date = [formatter dateFromString:@"August 02, 2014"]; Find how many days are in a month: NSDate* date = [NSDate date]; NSCalendar* cal = [NSCalendar currentCalendar]; NSRange currentRange = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date]; NSInteger numberOfDays = currentRange.length; Calculate how much time something took: NSDate* start = [NSDate date]; for(int i = 0; i < 1000000000; i++); NSDate* end = [NSDate date]; NSTimeInterval duration = [end timeIntervalSinceDate:start]; Find the Day Of Week for a specific Date: NSDate* date = [NSDate date]; NSCalendar* cal = [NSCalendar currentCalendar]; NSInteger dow = [cal ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];

Luego use NSComparisonResult para comparar la fecha.


NSDate *today = [NSDate date]; // it will give you current date NSDate *newDate = [NSDate dateWithString:@"xxxxxx"]; // your date NSComparisonResult result; //has three possible values: NSOrderedSame,NSOrderedDescending, NSOrderedAscending result = [today compare:newDate]; // comparing two dates if(result==NSOrderedAscending) NSLog(@"today is less"); else if(result==NSOrderedDescending) NSLog(@"newDate is less"); else NSLog(@"Both dates are same");

Hay otras formas que puede usar para comparar un objeto NSDate. Cada uno de los métodos será más eficiente en ciertas tareas. Elegí el método de comparación porque manejará la mayoría de las necesidades básicas de comparación de fechas.


NSDateFormatter *df= [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd"]; NSDate *dt1 = [[NSDate alloc] init]; NSDate *dt2 = [[NSDate alloc] init]; dt1=[df dateFromString:@"2011-02-25"]; dt2=[df dateFromString:@"2011-03-25"]; NSComparisonResult result = [dt1 compare:dt2]; switch (result) { case NSOrderedAscending: NSLog(@"%@ is greater than %@", dt2, dt1); break; case NSOrderedDescending: NSLog(@"%@ is less %@", dt2, dt1); break; case NSOrderedSame: NSLog(@"%@ is equal to %@", dt2, dt1); break; default: NSLog(@"erorr dates %@, %@", dt2, dt1); break; }

Disfruta de la codificación ......