как переделать начало недели не с воскресенья, а с понедельника

#ios #swift #uidatepicker

#iOS #swift #uidatepicker

Вопрос:

Я использую библиотеку для отображения календаря, я хотел бы, чтобы неделя начиналась в понедельник, а календарь отображался с текущей даты на 2017 год

https://github.com/miraan/CalendarDateRangePickerViewController

Изображение

изменил локаль на русский язык, но не помогло

 func getMonthLabel(date: Date) -> String {
    var dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "ru_RU")
    dateFormatter.dateFormat = "MMMM yyyy"
    return dateFormatter.string(from: date)
}

func getWeekdayLabel(weekday: Int) -> String {
    var components = DateComponents()
    components.calendar = Calendar.current
    components.weekday = weekday
    let date = Calendar.current.nextDate(after: Date(), matching: components, matchingPolicy: Calendar.MatchingPolicy.strict)

    if date == nil {
        return "E"
    }

    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "ru_RU")
    dateFormatter.dateFormat = "EEEEE"
    return dateFormatter.string(from: date!)
}
  

Комментарии:

1. Опубликуйте код в виде текста, а не изображения, и объясните, в чем проблема с вашим кодом

2. По какой-то причине в календаре неделя начинается в воскресенье, и я хотел бы начать в понедельник с локалем ru_RU. А также проблемы с отображением дат. Я хочу получить календарь с текущей даты на предыдущие годы

3. Почему бы вам тогда не установить .locale of Calendar ?

4. Единственный календарь, первым днем недели в котором является понедельник, — это календарь iso8601

5. Не работает — слишком расплывчато. Почему вы используете фиксированную локаль? Вы должны отображать название дня недели с учетом языка пользовательского устройства и настроек.

Ответ №1:

Проблема была в этой части кода, исправили на 2 и удалось получить желаемый результат.

 override public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellReuseIdentifier, for: indexPath) as! CalendarDateRangePickerCell

    cell.reset()

    let blankItems = getWeekday(date: getFirstDateForSection(section: indexPath.section)) - 1

    if indexPath.item < 7 {

       cell.label.text = getWeekdayLabel(weekday: indexPath.item **  2** )

    } else if indexPath.item < 7   blankItems {

        cell.label.text = ""