[英]How can I find the next weekend Swift
我有一個應用程序,我想在周六或周日顯示一些數據。 實際上我有一個分段控件,如果我按我的一個選項(這將是周末),我想檢查它是星期六還是星期日,但只是第一個周末。
這是我在分段控制中為獲取當前日期的第一個選項所做的工作
dateevent 是一個變量,我用來檢查 currentDate currentDate 是否被聲明為 currentDate
if dateevent.earlierDate(self.currentDate).isEqualToDate(self.currentDate){
if NSCalendar.currentCalendar().isDate(dateevent, equalToDate: self.currentDate, toUnitGranularity: .Day){
//Do something
}
}
首先找到要添加到NSDateComponents
weekday
屬性的天數,然后您可以使用dateByAddingComponents(_:toDate:options:)
。
let today = NSDate()
let calendar = NSCalendar.currentCalendar()
let todayWeekday = calendar.component(.Weekday, fromDate: today)
let addWeekdays = 7 - todayWeekday // 7: Saturday number
var components = NSDateComponents()
components.weekday = addWeekdays
let nextSaturday = calendar.dateByAddingComponents(components, toDate: today, options: .MatchFirst)
來自蘋果文檔:
如果日期確實在周末內,您可以使用
rangeOfWeekendStartDate:interval:containingDate:
方法來確定該周末時段的開始日期。 否則,您可以使用nextWeekendStartDate:interval:options:afterDate:
方法來確定下一個或上一個周末的開始日期。
獲取星期幾的擴展
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)
Swift 4 解決方案
我已經根據我的要求找到了,我在那里找到了以下日期。
1. Today
2. Tomorrow
3. This Week
4. This Weekend
5. Next Week
6. Next Weekend
所以,我創建了Date Extension
來獲取Current Week和Next Week 的日期。
代碼
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)
}
}
用法:
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
您可以根據需要修改Extension
。
謝謝!
我使用此實現在特定時間獲取下一個星期六:
代碼(斯威夫特 5):
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.