如果当前日期是2018年8月3日(星期五),我想获得2018年8月5日(星期六和星期日)
如果当前日期是8月4日(星期六),我仍然希望获得2018年8月5日(星期六和星期日)
如果当前日期是8月6日(星期一)那么我想得到8月11日和12日(星期六和星期日)
如何在swift中做到这一点?
Calendar 有方便的方法
dateIntervalOfWeekend(containing:start:interval:)检查给定的日期是否在周末,startDate并interval在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包含start,end和duration
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)
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |