Date
всегда в UTC на любом языке программирования, он не имеет часовых поясов. И DateFormatter
используется для отображения Date
в локальном / локализованном формате путем предоставления часовых поясов.
Date Formatter
позволяет вам преобразовать его в строку, удобную для чтения человеком.
В телефонах:
- Если у вас есть центральный сервер / БД, вам следует сохранить даты в UTC.
- когда время показывать на вашем телефоне, конвертируйте UTC в местный, используя часовой пояс.
НЕ ПЫТАЙТЕСЬ ПРЕОДОЛЕТЬ ЕГО.
Используйте код ниже, чтобы найти понедельник и воскресенье прошлой недели:
var date:Date!
dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.timeZone=TimeZone.current
TimeZone.current
date = Date()
var calendar = Calendar.current
calendar.firstWeekday = 2 // 1 is Sunday, 2 is Monday
let lastWeek = calendar.date(byAdding: .weekOfYear, value: -1, to: Date())
if let lastWeek = lastWeek {
var startOfLastWeek = Date()
var interval = TimeInterval(0)
_ = Calendar.current.dateInterval(of: .weekOfYear, start: &startOfLastWeek, interval: &interval, for: lastWeek)
startOfLastWeek = calendar.date(byAdding: .weekday, value: 1, to: startOfLastWeek)!
print(interval)
interval = interval - 1
let endOfLastWeek = startOfLastWeek.addingTimeInterval(interval)
print(startOfLastWeek)//2019-04-27 18:30:00 +0000
print(endOfLastWeek)//019-05-04 18:30:00 +0000
let startWeekString = dateFormatter.string(from: startOfLastWeek)
let endWeekString = dateFormatter.string(from: endOfLastWeek)
print(startWeekString)//28-04-2019 00:00:00
print(endWeekString)//05-05-2019 00:00:00
}