如果当前日期为2018年8月3日(星期五),我想获得2018年8月4日和5日(星期六和星期日)
如果当前日期是8月4日(星期六),我仍然想获得2018年8月4日和5日(星期六和星期日)
如果当前日期是8月6日(星期一),那么我想获得8月11日和12日(星期六和星期日)
如何迅速做到这一点?
答案 0 :(得分:5)
Calendar
为此提供了便捷的方法
dateIntervalOfWeekend(containing:start:interval:)
检查给定的日期是否在周末,并在inout参数中返回startDate
和interval
(以秒为单位的持续时间)。如果给定的日期在周末内,则Bool
的返回值为true
。
nextWeekend(startingAfter:start:interval:)
在即将到来的周末(startDate
或过去的(interval
)的inout参数中返回.forward
和.backward
。 / p>
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))
如果您需要星期六的开始和星期日的开始,则将最后一行替换为
let endDate = startDate.addingTimeInterval(interval-1)
print(startDate, Calendar.current.startOfDay(for: endDate))
或者,由Martin R建议(谢谢)–使用dateIntervalOfWeekend(containing:)
/ nextWeekend(startingAfter:)
,它们都返回包含start
,end
和{{ 1}}
duration
答案 1 :(得分:1)
let (nextSaturday,orderTotal) = getWeekends()
print(nextSaturday)
print(nextSunday)
func getWeekends() -> (Date,Date) {
let today = Date()
let calendar = Calendar.current
let todayWeekday = calendar.component(.weekday, from: today)
let addWeekdays = 7 - todayWeekday
var components = DateComponents()
components.weekday = addWeekdays
let nextSaturday = calendar.date(byAdding: components, to: today)
components.weekday = addWeekdays + 1
let nextSunday = calendar.date(byAdding: components, to: today)
return (nextSaturday,nextSunday)
}