Вычтите 7 дней с текущей даты
Кажется, что я не могу вычесть 7 дней от текущей даты. Вот как я это делаю:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:-7];
NSDate *sevenDaysAgo = [gregorian dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];
SevenDaysAgo получает то же значение, что и текущая дата.
пожалуйста, помогите.
EDIT:в моем коде я забыл заменить переменную, которая получает текущую дату с правой. Так что выше код является функциональным.
9 ответов:
используйте метод dateByAddingTimeInterval:
NSDate *now = [NSDate date]; NSDate *sevenDaysAgo = [now dateByAddingTimeInterval:-7*24*60*60]; NSLog(@"7 days ago: %@", sevenDaysAgo);выход:
7 days ago: 2012-04-11 11:35:38 +0000надеюсь, что это помогает
код:
NSDate *currentDate = [NSDate date]; NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; [dateComponents setDay:-7]; NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:currentDate options:0]; NSLog(@"\ncurrentDate: %@\nseven days ago: %@", currentDate, sevenDaysAgo); [dateComponents release];выход:
currentDate: 2012-04-22 12:53:45 +0000 seven days ago: 2012-04-15 12:53:45 +0000и я полностью согласен с Иеремией.
BR.
Евгений
Если вы используете по крайней мере iOS 8 или OS X 10.9, есть еще более чистый способ:
NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:[NSDate date] options:0];или, с Swift 2:
let sevenDaysAgo = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -7, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))и с Swift 3 и выше он становится еще более компактным:
let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: Date())
ответ dymv отлично работает. Это вы можете использовать в swift
extension NSDate { static func changeDaysBy(days : Int) -> NSDate { let currentDate = NSDate() let dateComponents = NSDateComponents() dateComponents.day = days return NSCalendar.currentCalendar().dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))! } }Вы можете называть это
NSDate.changeDaysBy(-7) // Date week earlier NSDate.changeDaysBy(14) // Date in next two weeksнадеюсь, что это поможет и thx к dymv
Swift 4.2 iOS 11.x Babec это!--5--> решение, чисто Свифт
extension Date { static func changeDaysBy(days : Int) -> Date { let currentDate = Date() var dateComponents = DateComponents() dateComponents.day = days return Calendar.current.date(byAdding: dateComponents, to: currentDate)! } }
Swift 3.0 + версия оригинального принятого ответа
дата().addingTimeInterval(-7 * 24 * 60 * 60)
однако при этом используются только абсолютные значения. Использование ответов календаря, вероятно, более подходит в большинстве случаев.
ДЛЯ SWIFT 3.0
здесь fucntion , вы можете уменьшить дни, месяц, день любым отсчетом как, например, здесь, я уменьшил год текущей системной даты на 100 лет , вы можете сделать это за день, месяц также просто установите счетчик и хранить его в массиве, вы можете этот массив в любом месте, то func currentTime ()
{ let date = Date() let calendar = Calendar.current var year = calendar.component(.year, from: date) let month = calendar.component(.month, from: date) let day = calendar.component(.day, from: date) let pastyear = year - 100 var someInts = [Int]() printLog(msg: "\(day):\(month):\(year)" ) for _ in pastyear...year { year -= 1 print("\(year) ") someInts.append(year) } print(someInts) }
Swift 3:
модификация ответа Дова.
extension Date { func dateBeforeOrAfterFromToday(numberOfDays :Int?) -> Date { let resultDate = Calendar.current.date(byAdding: .day, value: numberOfDays!, to: Date())! return resultDate } }использование:
let dateBefore = Date().dateBeforeOrAfterFromToday(numberOfDays : -7) let dateAfter = Date().dateBeforeOrAfterFromToday(numberOfDays : 7) print ("dateBefore : \(dateBefore), dateAfter :\(dateAfter)")
Comments