Ios 我怎样才能找到下个周末

Ios 我怎样才能找到下个周末,ios,swift,date,parsing,Ios,Swift,Date,Parsing,我有一个应用程序,我想在周六或周日显示一些数据。 实际上,我有一个分段控件,如果我按下其中一个选项(即周末),我想检查是周六还是周日,但只是第一个周末 这是我为分段控件中的第一个选项所做的,以获取当前日期 dateevent是一个用于检查是否为当前日期的变量 currentDate被声明为currentDate if dateevent.earlierDate(self.currentDate).isEqualToDate(self.currentDate){ if NSCalend

我有一个应用程序,我想在周六或周日显示一些数据。 实际上,我有一个分段控件,如果我按下其中一个选项(即周末),我想检查是周六还是周日,但只是第一个周末

这是我为分段控件中的第一个选项所做的,以获取当前日期

dateevent是一个用于检查是否为当前日期的变量 currentDate被声明为currentDate

  if  dateevent.earlierDate(self.currentDate).isEqualToDate(self.currentDate){

  if NSCalendar.currentCalendar().isDate(dateevent, equalToDate: self.currentDate, toUnitGranularity: .Day){

                                //Do something
                            }

                        }

获得每周工作日的延期

func dayOfTheWeek() -> String? {
    let dateFormatter = NSDateFormatter()
    dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
    dateFormatter.dateFormat = "EEEE"
    return dateFormatter.stringFromDate(self)
}
然后你就可以计算出你需要多少天来度过周末,并将它添加到NSDate中

NSDate().dateByAddingTimeInterval(60 * 60 * 24 * daysFromTodayToWeekend)
从:

如果日期确实在周末内,您可以使用
RangeofWeekendStarDate:interval:containingDate:
确定的方法 该周末时段的开始日期。否则,您可以使用
nextWeekendStartDate:interval:options:afterDate:
确定的方法 下一个或上一个周末的开始日期


首先找到要添加到
NSDateComponents
weekday
属性的天数,然后您可以使用
dateByAddingComponents(uuquot:toDate:options:)


Swift 4解决方案

我已经根据我的要求计算出了,我已经找到了下面的日期

1. Today

2. Tomorrow 

3. This Week 

4. This Weekend 

5. Next Week 

6. Next Weekend
因此,我创建了
日期扩展
,以获取本周和下周的日期

代码

extension Date {

    func getWeekDates() -> (thisWeek:[Date],nextWeek:[Date]) {
        var tuple: (thisWeek:[Date],nextWeek:[Date])
        var arrThisWeek: [Date] = []
        for i in 0..<7 {
            arrThisWeek.append(Calendar.current.date(byAdding: .day, value: i, to: startOfWeek)!)
        }
        var arrNextWeek: [Date] = []
        for i in 1...7 {
            arrNextWeek.append(Calendar.current.date(byAdding: .day, value: i, to: arrThisWeek.last!)!)
        }
        tuple = (thisWeek: arrThisWeek,nextWeek: arrNextWeek)
        return tuple
    }

    var tomorrow: Date {
        return Calendar.current.date(byAdding: .day, value: 1, to: noon)!
    }
    var noon: Date {
        return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
    }

    var startOfWeek: Date {
        let gregorian = Calendar(identifier: .gregorian)
        let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))
        return gregorian.date(byAdding: .day, value: 1, to: sunday!)!
    }

    func toDate(format: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}
您可以根据需要修改扩展名


谢谢

我使用此实现在特定时间获取下一个星期六:

代码(Swift 5):

let arrWeekDates = Date().getWeekDates() // Get dates of Current and Next week.
let dateFormat = "MMM dd" // Date format
let thisMon = arrWeekDates.thisWeek.first!.toDate(format: dateFormat)
let thisSat = arrWeekDates.thisWeek[arrWeekDates.thisWeek.count - 2].toDate(format: dateFormat)
let thisSun = arrWeekDates.thisWeek[arrWeekDates.thisWeek.count - 1].toDate(format: dateFormat)

let nextMon = arrWeekDates.nextWeek.first!.toDate(format: dateFormat)
let nextSat = arrWeekDates.nextWeek[arrWeekDates.nextWeek.count - 2].toDate(format: dateFormat)
let nextSun = arrWeekDates.nextWeek[arrWeekDates.nextWeek.count - 1].toDate(format: dateFormat)

print("Today: \(Date().toDate(format: dateFormat))") // Sep 26
print("Tomorrow: \(Date().tomorrow.toDate(format: dateFormat))") // Sep 27
print("This Week: \(thisMon) - \(thisSun)") // Sep 24 - Sep 30
print("This Weekend: \(thisSat) - \(thisSun)") // Sep 29 - Sep 30
print("Next Week: \(nextMon) - \(nextSun)") // Oct 01 - Oct 07
print("Next Weekend: \(nextSat) - \(nextSun)") // Oct 06 - Oct 07
func nextSaturday(atHour hour: Int, min: Int) -> Date {
    let today = Date()
    let daysToAdd = 7 - (Calendar.current.dateComponents([.weekday], from: today).weekday ?? 0 )
    let nextSaturday = Calendar.current.date(byAdding: .day, value: daysToAdd, to: today)!
    return Calendar.current.date(bySettingHour: hour, minute: min, second: 0, of: nextSaturday)!
}
如何使用它:

nextSaturday(atHour: 10, min: 0)

如果你能帮我举个例子,那就太好了,因为我尝试过使用它,但我无法完成。我测试了你的代码并打印了日期,它在周六返回,但当我尝试比较它们时,它也会比较时间,所以你知道我如何只比较日期吗?
nextSaturday(atHour: 10, min: 0)