Следующий код Swift 3 Playground показывает, как получить первый день предыдущей недели с любой даты:
import Foundation
let calendar = Calendar(identifier: .gregorian)
let intialDate = Date()
// Prepare the new date components
var newDateComponents = calendar.dateComponents([.year, .month, .weekOfMonth], from: intialDate)
newDateComponents.weekOfMonth = newDateComponents.weekOfMonth! - 1 // get previous week
newDateComponents.weekday = 2 // sunday is 1, monday is 2
// Get the new date
let newDate = calendar.date(from: newDateComponents)
print(newDate ?? "Could not retrieve a date")
Если вам нужно повторить эту операцию, вы можете преобразовать свой код в функцию или метод:
import Foundation
func firstDayOfPreviousWeek(from date: Date) -> Date? {
let calendar = Calendar(identifier: .gregorian)
var newDateComponents = calendar.dateComponents([.year, .month, .weekOfMonth], from: date)
newDateComponents.weekOfMonth = newDateComponents.weekOfMonth! - 1
newDateComponents.weekday = 2
return calendar.date(from: newDateComponents)
}
Следовательно, следующий код Playground показывает, как получить первый день предыдущей недели с 15 июля 2010 года:
import Foundation
func firstDayOfPreviousWeek(from date: Date) -> Date? {
let calendar = Calendar(identifier: .gregorian)
var newDateComponents = calendar.dateComponents([.year, .month, .weekOfMonth], from: date)
newDateComponents.weekOfMonth = newDateComponents.weekOfMonth! - 1
newDateComponents.weekday = 2
newDateComponents.timeZone = TimeZone(abbreviation: "GMT")
return calendar.date(from: newDateComponents)
}
let calendar = Calendar(identifier: .gregorian)
var july15Components = DateComponents()
july15Components.day = 15
july15Components.month = 7
july15Components.year = 2010
july15Components.timeZone = TimeZone(abbreviation: "GMT")
let july15 = calendar.date(from: july15Components)!
print(july15) // prints 2010-07-15 00:00:00 +0000
let newDate = firstDayOfPreviousWeek(from: july15)
print(newDate ?? "Could not retrieve a date") // prints 2010-07-05 00:00:00 +0000