2016-01-18 6 views
1

У меня есть код:NSDateComponents вопрос, когда хотят получить предыдущий месяц

let components = NSDateComponents() 
components.month -= 1 
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))! 

Но dateInTheMiddleOfPeriod является 2015- -18 06:00:12 +0000, но я ожидаю, 2015- - 18 06:00:12 +0000, потому что мне нужна дата в предыдущем месяце. Почему это происходит?

+4

Каждый незамонтированный компонент взят как «NSDateComponentUndefined», который является очень большим числом. Выделение одного из них не то, что вы хотите. –

ответ

2

Вы должны использовать NSCalendar дату метод путем добавления единицы вычесть месяц с сегодняшнего дня и использовать компонент метода NSCalendar получить значение месяца следующим образом:

var previousMonth: Int { 
    let cal = NSCalendar.autoupdatingCurrentCalendar() 
    return cal.component(.Month, fromDate: cal.dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: [])!) 
} 

previousMonth // 12 
+1

Я заменил код на calendarUnitToCalculate = NSCalendarUnit.Month; dateInTheMiddleOfPeriod = NSCalendar.currentCalendar(). DateByAddingUnit (calendarUnitToCalculate, значение: -1, toDate: dateNow, options: []). И теперь это работает, спасибо –

1

Для получения даты в течение одного месяца, прежде чем вы можете следовать инструкциям,

  1. Создание компонентов текущей даты,
  2. Затем уменьшает один месяц,
  3. Наконец преобразование компонент на сегодняшний день еще раз.

Пример кода:

let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate()) 
components.month -= 1 
let dateInTheMiddleOfPeriod = NSCalendar.currentCalendar().dateFromComponents(components)! 
print(dateInTheMiddleOfPeriod) 
+0

ваше решение работает, но мне больше нравится решение Leo Dabus. Но в любом случае +1 –