#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"