Swift / SwiftUI: управление неделями / датами в swift - PullRequest
0 голосов
/ 02 мая 2020

Я работаю над фитнес-приложением, в котором пользователи выбирают дни, в которые он хочет тренироваться.

Когда он открывает приложение, я хочу показать ему текущую неделю, где он может наблюдать дни, на которые запланированы его тренировки. за.

Если он из США, я хочу показать ему неделю, начиная с воскресенья. Для пользователей из ЕС это должно начинаться с понедельника.

Есть ли какой-нибудь способ получить «текущие» даты недели в зависимости от местоположения / географии пользователя? Учитывая, с какого дня начинается неделя в соответствующем месте.

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Использование

Calendar.current.firstWeekday

Если возвращается 1, то воскресенье - первый день недели

Если возвращается 2, то понедельник - первый день недели.

Вы можете проверить это, установив локаль вручную

var calendar = Calendar.current

calendar.locale = Locale(identifier: "en_GB")
print("\(calendar.locale!) starts on day \(calendar.firstWeekday)")
// en_GB starts on day 2

calendar.locale = Locale(identifier: "en_US")
print("\(calendar.locale!) starts on day \(calendar.firstWeekday)")
1 голос
/ 02 мая 2020

Я пытался найти решение для вашего вопроса. Я думаю, что это должно работать:

// Define a function that returns the following seven dates, given a start date
func getWeekDates(of startDate: Date, with calender: Calendar) -> [Date] {
    var weekDates: [Date] = []
    for i in 0..<7 {
        weekDates.append(calendar.date(byAdding: .day, value: i, to: startDate)!)
    }
    return weekDates
}

// This should automatically take the right calendar for the user's locale
// If you want to specify the day weeks start with manually, choose .gregorian or .iso8601:
// .gregorian starts on Sunday, .iso8601 starts on Monday
let calendar = Calendar.current

let startOfCurrentWeek = calendar.date(from: calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: Date()))

let currentWeekDates = getWeekDates(of: startOfCurrentWeek!, with: calendar)

Надеюсь, это поможет.

...