poner google cuenta como apple iphone objective-c cocoa-touch nsdate

iphone - google - ¿Cómo agrego 1 día a un NSDate?



como poner cuenta de google en iphone (24)

Básicamente, como dice el título. Me pregunto cómo podría agregar 1 día a un NSDate .

Así que si fuera:

21st February 2011

Se convertiría en:

22nd February 2011

O si fuera:

31st December 2011

Se convertiría en:

1st January 2012.


¡Es trabajo!

let today = Date() let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)


Desde iOS 8 puedes usar NSCalendar.dateByAddingUnit

Ejemplo en Swift 1.x:

let today = NSDate() let tomorrow = NSCalendar.currentCalendar() .dateByAddingUnit( .CalendarUnitDay, value: 1, toDate: today, options: NSCalendarOptions(0) )

Swift 2.0:

let today = NSDate() let tomorrow = NSCalendar.currentCalendar() .dateByAddingUnit( .Day, value: 1, toDate: today, options: [] )

Swift 3.0:

let today = Date() let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)


En Swift 2.1.1 y xcode 7.1 OSX 10.10.5, puede agregar cualquier número de días hacia adelante y hacia atrás usando la función

NSDate *today=[NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDateComponents *components=[[NSDateComponents alloc] init]; components.day=1; NSDate *targetDate =[calendar dateByAddingComponents:components toDate:today options: 0];

función llamada para incrementar la fecha actual en 9 días

NSDate *now = [NSDate date]; int daysToAdd = 1; NSDate *tomorrowDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"EEEE, dd MMM yyyy"]; NSLog(@"%@", [dateFormatter stringFromDate:tomorrowDate]);

función llamada para disminuir la fecha actual por 80 días

func addDaystoGivenDate(baseDate:NSDate,NumberOfDaysToAdd:Int)->NSDate { let dateComponents = NSDateComponents() let CurrentCalendar = NSCalendar.currentCalendar() let CalendarOption = NSCalendarOptions() dateComponents.day = NumberOfDaysToAdd let newDate = CurrentCalendar.dateByAddingComponents(dateComponents, toDate: baseDate, options: CalendarOption) return newDate! }


En swift puedes hacer extensiones para agregar métodos en NSDate

NSDateComponents *dayComponent = [[[NSDateComponents alloc] init] autorelease]; dayComponent.day = 1; NSCalendar *theCalendar = [NSCalendar currentCalendar]; dateToBeIncremented = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeIncremented options:0];

puedes usar esto como

NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];


En veloz

let today = Date() // date is then today for this example let tomorrow = today.add([.day: 1])


Este es un método de propósito general que le permite agregar / restar cualquier tipo de unidad (Año / Mes / Día / Hora / Segundo, etc.) en la fecha especificada.

Utilizando Swift 2.2

var newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: 9) print(newDate)


La implementación muy simple de Swift 3.0 sería:

var dayComponenet = NSDateComponents() dayComponenet.day = 1 var theCalendar = NSCalendar.currentCalendar() var nextDate = theCalendar.dateByAddingComponents(dayComponenet, toDate: NSDate(), options: nil)


Prueba esto

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; // now build a NSDate object for the next day NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:1]; NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: [NSDate date] options:0]; [offsetComponents release]; [gregorian release];


Puede usar el método de NSDate - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds donde los seconds serían 60 * 60 * 24 = 86400


Swift 2.0

NSDate *now = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now]; NSDate *startDate = [calendar dateFromComponents:components]; NSLog(@"StartDate = %@", startDate); components.day += 1; NSDate *endDate = [calendar dateFromComponents:components]; NSLog(@"EndDate = %@", endDate);


Swift 4, si lo que realmente necesita es un turno de 24 horas (60 * 60 * 24 segundos) y no "1 día calendario"

Futuro: let dayAhead = Date(timeIntervalSinceNow: TimeInterval(86400.0))

Pasado: let dayAgo = Date(timeIntervalSinceNow: TimeInterval(-86400.0))


Una implementación Swift 3 y 4 basada en respuesta y comentario . Esta extensión de fecha también tiene opciones adicionales para cambiar el año, mes y hora:

extension Date { /// Returns a Date with the specified days added to the one it is called with func add(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date { var targetDay: Date targetDay = Calendar.current.date(byAdding: .year, value: years, to: self)! targetDay = Calendar.current.date(byAdding: .month, value: months, to: targetDay)! targetDay = Calendar.current.date(byAdding: .day, value: days, to: targetDay)! targetDay = Calendar.current.date(byAdding: .hour, value: hours, to: targetDay)! targetDay = Calendar.current.date(byAdding: .minute, value: minutes, to: targetDay)! targetDay = Calendar.current.date(byAdding: .second, value: seconds, to: targetDay)! return targetDay } /// Returns a Date with the specified days subtracted from the one it is called with func subtract(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date { let inverseYears = -1 * years let inverseMonths = -1 * months let inverseDays = -1 * days let inverseHours = -1 * hours let inverseMinutes = -1 * minutes let inverseSeconds = -1 * seconds return add(years: inverseYears, months: inverseMonths, days: inverseDays, hours: inverseHours, minutes: inverseMinutes, seconds: inverseSeconds) } }

El uso para solo agregar un día según lo solicitado por OP sería:

let today = Date() // date is then today for this example let tomorrow = today.add(days: 1)


Usa el siguiente código:

extension NSDate { func addNoOfDays(noOfDays:Int) -> NSDate! { let cal:NSCalendar = NSCalendar.currentCalendar() cal.timeZone = NSTimeZone(abbreviation: "UTC")! let comps:NSDateComponents = NSDateComponents() comps.day = noOfDays return cal.dateByAddingComponents(comps, toDate: self, options: nil) } }

Como

NSDate().addNoOfDays(3)

ahora está en desuso.


Use la función a continuación y use el parámetro de días para obtener la fecha daysAhead / daysBehind simplemente pase el parámetro como positivo para la fecha futura o negativo para las fechas anteriores:

extension Date { /// Returns a Date with the specified amount of calendar components added to the one it is called with func add(_ components: [Calendar.Component: Int]) -> Date { var targetDate = self components.forEach { targetDate = Calendar.current.date(byAdding: $0.key, value: $0.value, to: self)! } return targetDate } /// Returns a Date with the specified amount of calendar components subtracted from the one it is called with func subtract(_ components: [Calendar.Component: Int]) -> Date { var negativeComponents = [Calendar.Component: Int]() components.forEach { negativeComponents[$0.key] = -1 * $0.value } return add(negativeComponents) } }


Yo tuve el mismo problema; use una extensión para NSDate:

let today = NSDate() let tomorrow = NSCalendar.currentCalendar().dateByAddingUnit( .Day, value: 1, toDate: today, options: NSCalendarOptions.MatchStrictly)


iOS 8+, OSX 10.9+, Objective-C

NSCalendar *cal = [NSCalendar currentCalendar]; NSDate *tomorrow = [cal dateByAddingUnit:NSCalendarUnitDay value:1 toDate:[NSDate date] options:0];


para Swift 2.2:

NSDate *now = [NSDate date]; int daysToAdd = 1; NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];

¡Espero que esto ayude a alguien!


Swift 3+: prueba esta extensión común

- (id)dateByAddingYears:(NSUInteger)years months:(NSUInteger)months days:(NSUInteger)days hours:(NSUInteger)hours minutes:(NSUInteger)minutes seconds:(NSUInteger)seconds { NSDateComponents * delta = [[[NSDateComponents alloc] init] autorelease]; NSCalendar * gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease]; [delta setYear:years]; [delta setMonth:months]; [delta setDay:days]; [delta setHour:hours]; [delta setMinute:minutes]; [delta setSecond:seconds]; return [gregorian dateByAddingComponents:delta toDate:self options:0]; }


Swift 4.0 (igual que Swift 3.0 en esta maravillosa respuesta, para dejarlo claro para los novatos como yo)

+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days { NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; dateComponents.day = days; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *previousDate = [calendar dateByAddingComponents:dateComponents toDate:fromDate options:0]; [dateComponents release]; return previousDate; }


NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendarUnit unit = NSCalendarUnitDay; NSInteger value = 1; NSDate *today = [NSDate date]; NSDate *tomorrow = [calendar dateByAddingUnit:unit value:value toDate:today options:NSCalendarMatchStrictly];


NSDateComponents *dayComponent = [[NSDateComponents alloc] init]; dayComponent.day = 1; NSCalendar *theCalendar = [NSCalendar currentCalendar]; NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0]; NSLog(@"nextDate: %@ ...", nextDate);

Esto debería explicarse por sí mismo.


addTimeInterval


func dateByAddingDays(inDays:NSInteger)->Date{ let today = Date() return Calendar.current.date(byAdding: .day, value: inDays, to: today)! }


newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80) print(newDate)

Ok, pensé que esto iba a funcionar para mí. Sin embargo, si lo usa para agregar un día al 31 de marzo de 2013, devolverá una fecha que solo tiene 23 horas agregadas. Puede que en realidad tenga el 24, pero el uso en los cálculos tiene solo 23:00 horas agregadas.

De manera similar, si avanza hasta el 28 de octubre de 2013, el código agrega 25 horas, lo que resulta en una fecha de 2013-10-28 01:00:00.

Muy extraño.

Para agregar un día estaba haciendo la cosa en la parte superior, agregando:

func addUnitToDate(unitType: NSCalendarUnit, number: Int, date:NSDate) -> NSDate { return NSCalendar.currentCalendar().dateByAddingUnit( unitType, value: number, toDate: date, options: NSCalendarOptions(rawValue: 0))! } print( addUnitToDate(.Day, number: 1, date: NSDate()) ) // Adds 1 Day To Current Date print( addUnitToDate(.Hour, number: 1, date: NSDate()) ) // Adds 1 Hour To Current Date print( addUnitToDate(.Minute, number: 1, date: NSDate()) ) // Adds 1 Minute To Current Date // NOTE: You can use negative values to get backward values too

Pero esto fue un verdadero desastre para ciertas fechas, principalmente debido al horario de verano.

Objective-C, las fechas son una pesadilla.