Swift: первый день недели в приложении не меняется после того, как я изменил его в настройках

#ios #swift #iphone #date #calendar

#iOS #быстрый #iPhone #Дата #Календарь #swift

Вопрос:

В моем приложении мне нужно группировать разные элементы на основе их даты, поэтому мне нужен метод для получения даты начала недели, а также способ узнать, находятся ли две даты на одной неделе. Тем не менее, я получаю неожиданные проблемы, пытаясь реализовать это.

Я использую этот код, чтобы получить первый день недели:

 return Calendar.current.date(from: Calendar.current.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))
  

Я использую Calendar.current , но он возвращает тот же день, независимо от того, какой день выбран в качестве начала недели в настройках iOS.

Чтобы проверить, совпадают ли две даты на одной неделе, я использую этот код:

     func isInSameWeek(date: Date) -> Bool { isEqual(to: date, toGranularity: .weekOfYear) }
  

Тем не менее, даты воскресенья и понедельника всегда считаются не относящимися к одной неделе, независимо от того, какой день выбран в качестве начала недели в настройках iOS.

Как мне это исправить? Или, может быть, это нормальное поведение, и этот код будет корректно работать для пользователей в разных регионах?

Ответ №1:

Вы меняете настройки приложения «Календарь», а не сам текущий календарь iOS. Вам необходимо указать свои собственные настройки приложения, которые будут изменены пользователем.

 var calendar = Calendar.current
calendar.firstWeekday = 2
calendar.date(from: calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: Date()))?.description(with: .current)  // "Monday, September 14, 2020 at 12:00:00 AM Brasilia Standard Time"