如何在swift中获得这个周末约会?

sar*_*rah 6 ios swift

如果当前日期是2018年8月3日(星期五),我想获得2018年8月5日(星期六和星期日)

如果当前日期是8月4日(星期六),我仍然希望获得2018年8月5日(星期六和星期日)

如果当前日期是8月6日(星期一)那么我想得到8月11日和12日(星期六和星期日)

如何在swift中做到这一点?

vad*_*ian 5

Calendar 有方便的方法

  • dateIntervalOfWeekend(containing:start:interval:)检查给定的日期是否在周末,startDateinterval在inout参数中返回and (以秒为单位)。该Bool返回值是true给定的日期是周末之内。

  • nextWeekend(startingAfter:start:interval:)在即将到来的(参数)或已通过()周末的inout参数中返回startDateund 。interval.forward.backward


let now = Date()
var startDate = Date()
var interval : TimeInterval = 0.0
if !Calendar.current.dateIntervalOfWeekend(containing: now, start: &startDate, interval: &interval) {
    Calendar.current.nextWeekend(startingAfter: now, start: &startDate, interval: &interval, direction: .forward)
}
print(startDate, startDate.addingTimeInterval(interval))
Run Code Online (Sandbox Code Playgroud)

如果您需要星期六的开始和星期日的开始,那么将最后一行替换为

let endDate = startDate.addingTimeInterval(interval-1)
print(startDate, Calendar.current.startOfDay(for: endDate))
Run Code Online (Sandbox Code Playgroud)

或者-由Martin R建议(感谢)-使用dateIntervalOfWeekend(containing:)/ nextWeekend(startingAfter:)都返回一个DateInterval包含startendduration

let now = Date()
let calendar = Calendar.current
let weekEndInterval = calendar.dateIntervalOfWeekend(containing: now) ?? calendar.nextWeekend(startingAfter: now)!
let startDate = weekEndInterval.start
let endDate = startDate.addingTimeInterval(weekEndInterval.duration-1)
print(startDate, calendar.startOfDay(for: endDate))
Run Code Online (Sandbox Code Playgroud)