Swift - Weekday by current location by currentCalendar()

后端 未结 2 1950
没有蜡笔的小新
没有蜡笔的小新 2020-12-11 15:36

Today is Wednesday and I have this code

let calendar:NSCalendar = NSCalendar.currentCalendar()
let dateComps:NSDateComponents = calendar.components(.Calendar         


        
相关标签:
2条回答
  • 2020-12-11 15:59

    For the Gregorian calendar, the weekday property of NSDateComponents is always 1 for Sunday, 2 for Monday etc.

    NSCalendar.currentCalendar().firstWeekday
    

    gives the (index of the) first weekday in the current locale, that could be 1 in USA and 2 in Bulgaria. Therefore

    var dayOfWeek = dateComps.weekday + 1 - calendar.firstWeekday
    if dayOfWeek <= 0 {
        dayOfWeek += 7
    }
    

    is the day of the week according to your locale. As a one-liner:

    let dayOfWeek = (dateComps.weekday + 7 - calendar.firstWeekday) % 7 + 1
    

    Update for Swift 3:

    let calendar = Calendar.current
    var dayOfWeek = calendar.component(.weekday, from: Date()) + 1 - calendar.firstWeekday
    if dayOfWeek <= 0 {
        dayOfWeek += 7
    }
    
    0 讨论(0)
  • 2020-12-11 16:14

    If you want to know which are the weekend days you can use this extension:

    extension Calendar {
    
        /// Return the weekSymbol index for the first week end day
        var firstWeekendDay: Int {
            let firstWeekDay = self.firstWeekday
            return (firstWeekDay - 2) >= 0 ? firstWeekDay - 2 : firstWeekDay - 2 + 7
        }
    
        /// Return the weekSymbol index for the second week end day
        var secondWeekendDay: Int {
            let firstWeekDay = self.firstWeekday
            return (firstWeekDay - 1) >= 0 ? firstWeekDay - 1 : firstWeekDay - 1 + 7
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题