2016-02-16 6 views
0

Мне нужно получить 3 недели с датами впереди с текущей даты. и добавить все даты в массив. Как я могу это получить?ios: Получите 3 недели (по дате) вперед

let date = NSDate() 
     let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
     let comps = calendar?.components([.Day, .WeekOfMonth, .Month], fromDate: date) 
     let days = calendar?.rangeOfUnit(NSCalendarUnit.Day, inUnit: NSCalendarUnit.Month, forDate: date) 
     print(days?.length) 

Этот код дает мне дни в этом месяце. Но 3 weaks вперед может занять в следующем месяце

к примеру сегодня 16,02 мне нужно напечатать что-то вроде этого

16 17 18 19 20 21 22 23 24 25 26 27 28 29 01 02 04 ....

спасибо заранее

+0

http://stackoverflow.com/questions/5067785/how-do-i -add-1-day-to-nsdate – Shades

+0

Это решение не включает летнее время – Anton

+0

func dateByAddingComponents (_ comps: NSDateComponents, toDate date: NSDate, options opts: NSCalendarOptions) -> NS Дата? –

ответ

0

Хорошо, нашли какое-то решение. Как я знаю, что каждую неделю 7 дней * 3 = 21

// MARK: - Next 3 weeks 
    func nextThreeWeeks() -> Array<String> { 
     let date = NSDate() 
     var days : Array<String> = [] 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle 
     dateFormatter.dateFormat = "dd" 
     let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 

     for i in 0 ..< 21 { 
      let next21Days = calendar!.dateByAddingUnit(NSCalendarUnit.Day, value: i, toDate: date, options: []) 
      days.append(dateFormatter.stringFromDate(next21Days!)) 
     } 
     return days 
    } 

Он напечатает следующие даты:

Факультативные (2016-02-16 12:03:41 +0000)
Дополнительно (2016-02-17 12:03:41 +0000)
Дополнительный (2016-02-18 12:03:41 +0000)
Дополнительный (2016-02-19 12:03:41 +0000)
. ..
Дополнительно (2016-03-06 12:03:41 +0000)
Дополнительно (2016-03-07 12:03:41 +0000)

1

, как об этом, который генерирует массив дней запрашиваемой

var date = NSDate() 
    var days : [String] = [] 

    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd" 

    for _ in 0...20 
    { 
     days.append(dateFormatter.stringFromDate(date)) 

     // move on to the next day 
     date = NSCalendar.currentCalendar().dateByAddingUnit(
      .Day, 
      value: 1, 
      toDate: date, 
      options: NSCalendarOptions(rawValue: 0))! 
    } 
    print(days) 
+0

Да, я написал то же :) см. Мой обновленный ответ :), но спасибо u. – Anton

0

Я получил решение с напечатанным результатом что вы точно спросите.

Ниже кода и вывода

var arrayDate = [String]() 

    override func viewDidLoad() 
    { 
    super.viewDidLoad() 
    for var intWeek = 0; intWeek < 21; ++intWeek 
    { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "dd" 
     let dateComponents: NSDateComponents = NSDateComponents() 
     dateComponents.day = intWeek 
     let date = NSDate() 
     let calendar = NSCalendar.currentCalendar() 
     let components = calendar.dateByAddingComponents(dateComponents, toDate: date, options:NSCalendarOptions(rawValue: 0)) 
     let startOfDay = formatter.stringFromDate(components!) 
     arrayDate.append(startOfDay) 
     print("The dates are - \(arrayDate)") 
    } 
    } 

Выходные Результаты

The dates are - ["16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "01", "02", "03", "04", "05", "06", "07"] 

Огромное спасибо Антону

+0

Спасибо, уже отправил собственный ответ. Это поможет кому-то еще – Anton

+0

Мой ответ отличается от вашего ответа. – user3182143

+0

Okey Спасибо. – user3182143

Смежные вопросы