Как добавить 1 день к NSDate? - PullRequest
       74

Как добавить 1 день к NSDate?

300 голосов
/ 21 февраля 2011

В основном, как говорится в названии.Мне интересно, как я мог бы добавить 1 день к NSDate.

Так что если бы это было:

21st February 2011

Это стало бы:

22nd February 2011

Илиесли бы это было:

31st December 2011

Это стало бы:

1st January 2012.

Ответы [ 24 ]

5 голосов
/ 07 марта 2013
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];
4 голосов
/ 21 февраля 2011

Вы можете использовать метод NSDate - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds, где seconds будет 60 * 60 * 24 = 86400

3 голосов
/ 15 марта 2019

Swift 4.0

extension Date {
    func add(_ unit: Calendar.Component, value: Int) -> Date? {
        return Calendar.current.date(byAdding: unit, value: value, to: self)
    }
}

Использование

date.add(.day, 3)!   // adds 3 days
date.add(.day, -14)!   // subtracts 14 days

Примечание. Если вы не знаете, почему строки кода заканчиваются восклицательным знаком, поищите в Google «Swift Optionals».

3 голосов
/ 18 апреля 2016

Вот метод общего назначения, который позволяет добавлять / вычитать любые единицы измерения (год / месяц / день / час / секунда и т. Д.) В указанную дату.

Использование Swift 2.2

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
3 голосов
/ 05 января 2016

В Swift 2.1.1 и xcode 7.1 OSX 10.10.5 вы можете добавлять любое количество дней вперед и назад, используя функцию

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!
}

вызов функции для увеличения текущей даты на 9 дней

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

вызов функции для уменьшения текущей даты на 80 дней

newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80)
 print(newDate)
2 голосов
/ 30 октября 2015
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]);
2 голосов
/ 09 декабря 2015

В swift вы можете сделать расширение для добавления метода в NSDate

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

, вы можете использовать это как

NSDate().addNoOfDays(3)
1 голос
/ 17 февраля 2018

Swift 4, если все, что вам действительно нужно, это 24-часовая смена (60 * 60 * 24 секунды), а не «1 календарный день»

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

Прошлое: let dayAgo = Date(timeIntervalSinceNow: TimeInterval(-86400.0))

1 голос
/ 12 февраля 2013
NSDateComponents *dayComponent = [[[NSDateComponents alloc] init] autorelease];
dayComponent.day = 1;

NSCalendar *theCalendar = [NSCalendar currentCalendar];
dateToBeIncremented = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeIncremented options:0];

Хорошо - я думал, что это сработает для меня.Однако, если вы используете его, чтобы добавить день к 31 марта 2013 года, он вернет дату, к которой добавлено только 23 часа.На самом деле вполне может быть 24, но при использовании в расчетах добавлено только 23:00 часов.

Аналогично, если вы перейдете к 28 октября 2013 г., код добавит 25 часов, что приведет к дате 2013 г.10-28 01: 00: 00.

Чтобы добавить день, я занимался делом сверху, добавив:

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

Сложно, главным образом из-за перехода на летнее время.

1 голос
/ 04 мая 2016

для swift 2.2:

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

Надеюсь, это кому-нибудь поможет!

...