我有一個陣列["24-05-2022", "25-05-2022", "26-05-2022", "27-05-2022", "28-05-2022", "29-05-2022", "30-05-2022"]和兩個按鈕作為“下一個”和“上一個”。所以現在點擊下一個按鈕我需要下一個 7 個元素,["31-05-2022", "01-06-2022", "02-06-2022", "03-06-2022", "04-06-2022", "05-06-2022", "06-06-2022"]然后再次點擊下一個按鈕需要下一個 7 個["07-06-2022 to "13-06-2022"]元素最多 10 次。
單擊上一個按鈕我需要前 7 個元素。那么'for回圈'的條件應該是什么?我正在使用下面的函式獲取下一個日期。
func getNextDates() {
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-YYYY"
let selectedDate = self.presentDate
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT 0:00")
guard let selected = dateFormatter.date(from: selectedDate) else {
fatalError()
}
let dateString = formatter.string(from: selected)
print("Selected Date is ==>",dateString)
let calendar = Calendar(identifier: .gregorian)
for i in 1...7 {
let newDate = calendar.date(byAdding: .day, value: i, to: selected)
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-YYYY"
let dateString = formatter.string(from: newDate!)
print("Next DAYS ARE ==>>",dateString)
}
}
我可以得到下一次約會。但我想要10次。
uj5u.com熱心網友回復:
通過創建一個擴展來使用以下代碼Date
var daysInCurrentWeek:[Date]?
let formatter = DateFormatter()
override func viewDidLoad() {
super.viewDidLoad()
formatter.dateFormat = "dd-MM-YYYY"
daysInCurrentWeek = Date().daysOfWeek()
let strings = daysInCurrentWeek?.map({formatter.string(from: $0)})
print(strings)
}
@IBAction func nextButtonTapped(_ sender: UIButton) {
let nextWeekdays = daysInCurrentWeek?.last?.byAdding(component: .weekOfMonth, value: 1)?.daysOfWeek()
daysInCurrentWeek = nextWeekdays!
print(nextWeekdays?.map({formatter.string(from: $0)}))
}
@IBAction func previousButtonTapped(_ sender: UIButton) {
let previousWeekDays = daysInCurrentWeek?.last?.byAdding(component: .weekOfMonth, value: -1)?.daysOfWeek()
daysInCurrentWeek = previousWeekDays
print(previousWeekDays?.map({formatter.string(from: $0)}))
}
日期擴展將是這樣的
extension Date {
func byAdding(component: Calendar.Component, value: Int, wrappingComponents: Bool = false, using calendar: Calendar = .current) -> Date? {
calendar.date(byAdding: component, value: value, to: self, wrappingComponents: wrappingComponents)
}
func dateComponents(_ components: Set<Calendar.Component>, using calendar: Calendar = .current) -> DateComponents {
calendar.dateComponents(components, from: self)
}
func startOfWeek(using calendar: Calendar = .current) -> Date {
calendar.date(from: dateComponents([.yearForWeekOfYear, .weekOfYear], using: calendar))!
}
var noon: Date {
Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
func daysOfWeek(using calendar: Calendar = .current) -> [Date] {
let startOfWeek = self.startOfWeek(using: calendar).noon
return (0...6).map { startOfWeek.byAdding(component: .day, value: $0, using: calendar)! }
}
}
結果會是這樣
Optional(["12-06-2022", "13-06-2022", "14-06-2022", "15-06-2022", "16-06-2022", "17-06-2022", "18-06-2022"])
Optional(["05-06-2022", "06-06-2022", "07-06-2022", "08-06-2022", "09-06-2022", "10-06-2022", "11-06-2022"])
Optional(["29-05-2022", "30-05-2022", "31-05-2022", "01-06-2022", "02-06-2022", "03-06-2022", "04-06-2022"])
Optional(["05-06-2022", "06-06-2022", "07-06-2022", "08-06-2022", "09-06-2022", "10-06-2022", "11-06-2022"])
Optional(["12-06-2022", "13-06-2022", "14-06-2022", "15-06-2022", "16-06-2022", "17-06-2022", "18-06-2022"])
Optional(["19-06-2022", "20-06-2022", "21-06-2022", "22-06-2022", "23-06-2022", "24-06-2022", "25-06-2022"])
Optional(["26-06-2022", "27-06-2022", "28-06-2022", "29-06-2022", "30-06-2022", "01-07-2022", "02-07-2022"])
Optional(["03-07-2022", "04-07-2022", "05-07-2022", "06-07-2022", "07-07-2022", "08-07-2022", "09-07-2022"])
Optional(["10-07-2022", "11-07-2022", "12-07-2022", "13-07-2022", "14-07-2022", "15-07-2022", "16-07-2022"])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492618.html
