如何在 Swift3 中获取上周的天数 ios
How to get last week days in Swift3 ios
我正在开发日历应用程序。我必须在哪里找到上周和本周的日期。我可以使用以下代码获取当前周日期:
let dateInWeek = Date()
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let dates = (weekdays.lowerBound ..< weekdays.upperBound)
.flatMap { calendar.date(byAdding: .day, value: [=11=] - dayOfWeek, to: dateInWeek) }
print(dates)
这里的日期数组是:
[2018-05-13 07:12:44 +0000, 2018-05-14 07:12:44 +0000, 2018-05-15 07:12:44 +0000, 2018-05-16 07:12:44 +0000, 2018-05-17 07:12:44 +0000, 2018-05-18 07:12:44 +0000, 2018-05-19 07:12:44 +0000]
像这样 谁能建议我如何从日历中获取上周的日期?
谢谢!
这应该有效(至少在公历中):
let dateInWeek = Date()
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek.addingTimeInterval(60 * 60 * 24 * 7 * -1))!
let dates = (weekdays.lowerBound ..< weekdays.upperBound)
.flatMap { calendar.date(byAdding: .day, value: [=10=] - dayOfWeek, to: dateInWeek.addingTimeInterval(60 * 60 * 24 * 7 * -1)) }
print(dates)
我基本上从 dateInWeek
的两次出现中减去 7 天。
这将有效,除非我不知道周的工作方式发生了一些变化,或者 Calendar.current
是某个日历,其中一周没有 7 天。
考虑到您使用的是日历应用,让我们玩得开心,这里有一个更复杂的实现。
extension Date {
// Get Date Array in a certain week, offset by some day
func datesOfWeek(weekOffset: Int = 0) -> [Date] {
var dates = [Date]()
for index in 1...7 {
if let weekday = Weekday(rawValue: index) {
let date = dateOfWeek(weekday: weekday, weekOffset: weekOffset)
dates.append(date)
}
}
return dates
}
// Get Date in a certain week, in a certain week day
func dateOfWeek(weekday targetDayOfWeek: Weekday, weekOffset: Int = 0) -> Date {
var selfDate = self
let weekInterval = intervalByDays(days: weekOffset * 7)
selfDate.addTimeInterval(weekInterval)
let formattor = DateFormatter()
formattor.timeZone = TimeZone.current
formattor.dateFormat = "e"
if let selfDayOfWeek = Int(formattor.string(from: selfDate)) {
let interval_days = targetDayOfWeek.rawValue - selfDayOfWeek
let interval = intervalByDays(days: interval_days)
selfDate.addTimeInterval(interval)
return selfDate
}
return selfDate
}
// for good reading
enum Weekday: Int {
case Sunday = 1
case Monday = 2
case Tuesday = 3
case Wednesday = 4
case Thursday = 5
case Friday = 6
case Saturday = 7
}
// how many seconds in a day
private func intervalByDays(days: Int) -> TimeInterval {
let secondsPerMinute = 60
let minutesPerHour = 60
let hoursPerDay = 24
return TimeInterval(
days * hoursPerDay * minutesPerHour * secondsPerMinute)
}
}
现在查看结果:
let today = Date()
// date of today
// 2018-05-16 13:12:14 +0000
print(today)
// dates of this week
// [2018-05-13 13:12:14 +0000, 2018-05-14 13:12:14 +0000, 2018-05-15 13:12:14 +0000, 2018-05-16 13:12:14 +0000, 2018-05-17 13:12:14 +0000, 2018-05-18 13:12:14 +0000, 2018-05-19 13:12:14 +0000]
print(today.datesOfWeek())
// dates of last week
// [2018-05-06 13:12:14 +0000, 2018-05-07 13:12:14 +0000, 2018-05-08 13:12:14 +0000, 2018-05-09 13:12:14 +0000, 2018-05-10 13:12:14 +0000, 2018-05-11 13:12:14 +0000, 2018-05-12 13:12:14 +0000]
print(today.datesOfWeek(weekOffset: -1))
// dates of next week
// [2018-05-20 13:12:14 +0000, 2018-05-21 13:12:14 +0000, 2018-05-22 13:12:14 +0000, 2018-05-23 13:12:14 +0000, 2018-05-24 13:12:14 +0000, 2018-05-25 13:12:14 +0000, 2018-05-26 13:12:14 +0000]
print(today.datesOfWeek(weekOffset: 1))
// Tuesday of this week
// 2018-05-15 13:18:03 +0000
print(today.dateOfWeek(weekday: .Tuesday))
// Friday of last week
// 2018-05-11 13:18:03 +0000
print(today.dateOfWeek(weekday: .Friday, weekOffset: -1))
我正在开发日历应用程序。我必须在哪里找到上周和本周的日期。我可以使用以下代码获取当前周日期:
let dateInWeek = Date()
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let dates = (weekdays.lowerBound ..< weekdays.upperBound)
.flatMap { calendar.date(byAdding: .day, value: [=11=] - dayOfWeek, to: dateInWeek) }
print(dates)
这里的日期数组是:
[2018-05-13 07:12:44 +0000, 2018-05-14 07:12:44 +0000, 2018-05-15 07:12:44 +0000, 2018-05-16 07:12:44 +0000, 2018-05-17 07:12:44 +0000, 2018-05-18 07:12:44 +0000, 2018-05-19 07:12:44 +0000]
像这样 谁能建议我如何从日历中获取上周的日期?
谢谢!
这应该有效(至少在公历中):
let dateInWeek = Date()
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek.addingTimeInterval(60 * 60 * 24 * 7 * -1))!
let dates = (weekdays.lowerBound ..< weekdays.upperBound)
.flatMap { calendar.date(byAdding: .day, value: [=10=] - dayOfWeek, to: dateInWeek.addingTimeInterval(60 * 60 * 24 * 7 * -1)) }
print(dates)
我基本上从 dateInWeek
的两次出现中减去 7 天。
这将有效,除非我不知道周的工作方式发生了一些变化,或者 Calendar.current
是某个日历,其中一周没有 7 天。
考虑到您使用的是日历应用,让我们玩得开心,这里有一个更复杂的实现。
extension Date {
// Get Date Array in a certain week, offset by some day
func datesOfWeek(weekOffset: Int = 0) -> [Date] {
var dates = [Date]()
for index in 1...7 {
if let weekday = Weekday(rawValue: index) {
let date = dateOfWeek(weekday: weekday, weekOffset: weekOffset)
dates.append(date)
}
}
return dates
}
// Get Date in a certain week, in a certain week day
func dateOfWeek(weekday targetDayOfWeek: Weekday, weekOffset: Int = 0) -> Date {
var selfDate = self
let weekInterval = intervalByDays(days: weekOffset * 7)
selfDate.addTimeInterval(weekInterval)
let formattor = DateFormatter()
formattor.timeZone = TimeZone.current
formattor.dateFormat = "e"
if let selfDayOfWeek = Int(formattor.string(from: selfDate)) {
let interval_days = targetDayOfWeek.rawValue - selfDayOfWeek
let interval = intervalByDays(days: interval_days)
selfDate.addTimeInterval(interval)
return selfDate
}
return selfDate
}
// for good reading
enum Weekday: Int {
case Sunday = 1
case Monday = 2
case Tuesday = 3
case Wednesday = 4
case Thursday = 5
case Friday = 6
case Saturday = 7
}
// how many seconds in a day
private func intervalByDays(days: Int) -> TimeInterval {
let secondsPerMinute = 60
let minutesPerHour = 60
let hoursPerDay = 24
return TimeInterval(
days * hoursPerDay * minutesPerHour * secondsPerMinute)
}
}
现在查看结果:
let today = Date()
// date of today
// 2018-05-16 13:12:14 +0000
print(today)
// dates of this week
// [2018-05-13 13:12:14 +0000, 2018-05-14 13:12:14 +0000, 2018-05-15 13:12:14 +0000, 2018-05-16 13:12:14 +0000, 2018-05-17 13:12:14 +0000, 2018-05-18 13:12:14 +0000, 2018-05-19 13:12:14 +0000]
print(today.datesOfWeek())
// dates of last week
// [2018-05-06 13:12:14 +0000, 2018-05-07 13:12:14 +0000, 2018-05-08 13:12:14 +0000, 2018-05-09 13:12:14 +0000, 2018-05-10 13:12:14 +0000, 2018-05-11 13:12:14 +0000, 2018-05-12 13:12:14 +0000]
print(today.datesOfWeek(weekOffset: -1))
// dates of next week
// [2018-05-20 13:12:14 +0000, 2018-05-21 13:12:14 +0000, 2018-05-22 13:12:14 +0000, 2018-05-23 13:12:14 +0000, 2018-05-24 13:12:14 +0000, 2018-05-25 13:12:14 +0000, 2018-05-26 13:12:14 +0000]
print(today.datesOfWeek(weekOffset: 1))
// Tuesday of this week
// 2018-05-15 13:18:03 +0000
print(today.dateOfWeek(weekday: .Tuesday))
// Friday of last week
// 2018-05-11 13:18:03 +0000
print(today.dateOfWeek(weekday: .Friday, weekOffset: -1))