Вы должны использовать эту функцию для вычисления диапазона дат, она принимает целевую дату, компонент календаря и два входных параметра, которые будут заполнены вычисленным интервалом даты и времени.
func dateInterval(of component: Calendar.Component, start: inout Date, interval: inout TimeInterval, for date: Date) -> Bool
Вот пример:
let calendar = Calendar.current
let today = Date()
let lastWeek = calendar.date(byAdding: .weekOfYear, value: -1, to: today)
let lastMonth = calendar.date(byAdding: .month, value: -1, to: today)
if let lastWeek = lastWeek {
var startOfLastWeek = Date()
var interval = TimeInterval(0)
calendar.dateInterval(of: .weekOfYear, start: &startOfLastWeek, interval: &interval, for: lastWeek)
let endOfLastWeek = startOfLastWeek.addingTimeInterval(interval)
print(startOfLastWeek)
print(endOfLastWeek)
}
if let lastMonth = lastMonth {
var startOfLastMonth = Date()
var interval = TimeInterval(0)
calendar.dateInterval(of: .month, start: &startOfLastMonth, interval: &interval, for: lastMonth)
let endOfLastMonth = startOfLastMonth.addingTimeInterval(interval)
print(startOfLastMonth)
print(endOfLastMonth)
}
Если вам нужно изменить первый день недели, вы можете изменить его в своем календаре следующим образом:
var calendar = Calendar.current
calendar.firstWeekday = 2 // 1 is Sunday, 2 is Monday
Помните, чтокогда вы печатаете дату print(startOfLastMonth)
, она отображается в UTC, если вы хотите, чтобы дата печаталась в вашем часовом поясе, вам придется использовать DateFormatter .