如何迅速获得这个周末的约会?

时间:2018-08-04 04:28:41

标签: ios swift

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

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

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

如何迅速做到这一点?

2 个答案:

答案 0 :(得分:5)

Calendar为此提供了便捷的方法

  • dateIntervalOfWeekend(containing:start:interval:)检查给定的日期是否在周末,并在inout参数中返回startDateinterval(以秒为单位的持续时间)。如果给定的日期在周末内,则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:),它们都返回包含startend和{{ 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)
    }