2015-09-22 4 views
1

Я пытаюсь установить даты начала недели в приложении. Однако в 2017 году, это приводит к не-ожидаемому поведению, так как в этом году неделю «1» 2 раза в нем,Получение первой недели года NSCalendar

начиная воскресенье 1-го января и вс декабря 31. Моей программа находит последнюю. Давая мне результат '01 -01-2018 ', где должен быть, '02 -01-2017'

Как я могу убедиться, что моя программа найдет первую дату?

это мой код:

getFirstDay(Int(weekNummer)!, year: yearWrap) 

func getFirstDay(weekNumber:Int, year:Int)->String?{ 
    let Calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let dayComponent = NSDateComponents() 
    dayComponent.weekOfYear = weekNumber 
    dayComponent.weekday = 2 
    dayComponent.year = year 
    var date = Calendar.dateFromComponents(dayComponent) 
    if ((weekNumber == 1 || weekNumber == 52 || weekNumber == 53) && Calendar.components(.Month, fromDate: date!).month != 1){ 
     dayComponent.year = year - 1 
     date = Calendar.dateFromComponents(dayComponent) 
    } 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd-MM-yyyy" 
    return String(dateFormatter.stringFromDate(date!)) 
} 

ответ

1

Пусть делают NSCalendar полная дата математике

func firstDayOfWeek(week: Int, inYear year : Int) -> NSString { 
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let components = NSDateComponents() 
    components.weekOfYear = week 
    components.yearForWeekOfYear = year 
    components.weekday = 2 // First weekday of the week (Sunday = 1) 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd-MM-yyyy" 
    let date = calendar.dateFromComponents(components)! 
    return dateFormatter.stringFromDate(date) 
} 

firstDayOfWeek(1, inYear : 2017) // 02-01-2017 
firstDayOfWeek(1, inYear : 2018) // 01-01.2018 
Смежные вопросы