我需要一周中给定日期的日期列表。
举个例子:如果用户选择像2017-6-7这样的随机日期,我需要获取并显示一周的日期。2017-6-4、2017-6-5、2017-6-6、2017-6-7、2017-6-8、2017-6-9、2017-6-10
我在网上找不到任何解决办法。
谢谢
发布于 2017-06-07 15:50:50
试试这个:
let dateInWeek = Date()//7th June 2017
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let days = (weekdays.lowerBound ..< weekdays.upperBound)
.compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: dateInWeek) }
print(days)它会给你这样的答案:
2017年6月4日(星期日) 2017年6月5日 2017年6月6日 2017年6月7日 2017年6月8日 2017年6月9日 2017年6月10日(星期六)
Start fromMonday
以上是我的日历的默认行为,这就是为什么它从周日开始。
如果您希望从星期一开始,那么执行以下更改:
let dayOfWeek = calendar.component(.weekday, from: dateInWeek) - 1这取决于您的日历所在的地区。
发布于 2017-06-07 15:39:57
这是使用Calendar的日期数学技巧的起点
var calendar = Calendar.current
calendar.firstWeekday = 1 // adjust first weekday if necessary
var startOfWeek = Date()
var interval : TimeInterval = 0.0
_ = calendar.dateInterval(of:.weekOfYear, start: &startOfWeek, interval: &interval, for: Date())
for i in 0..<7 {
print(calendar.date(byAdding: .day, value: i, to: startOfWeek)!)
}发布于 2017-06-07 15:56:13
你可以用这个。
let today = Date()
let weekStartDate = today.getWeekStartDate(fromDate: today)
for i in 0..<5 {
let nextDate = weekStartDate?.getNextDay(value: i, currentDate:weekStartDate)
}
func getWeekStartDate(fromDate : Date?) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if let date = fromDate {
var calendar = Calendar(identifier: .gregorian)
calendar.firstWeekday = 3
var startDate : Date = Date()
var interval : TimeInterval = 0
if calendar.dateInterval(of: .weekOfYear, start: &startDate, interval: &interval, for: date) {
print("Start of week is \(startDate)")
// prints "Start of week is 2017-01-01 06:00:00 +0000"
return startDate
}
}
return nil
}
func getNextDay(value : Int, currentDate : Date?) -> Date? {
let dayComponenet = NSDateComponents()
dayComponenet.day = value
let theCalendar = NSCalendar.current
let nextDate = theCalendar.date(byAdding: dayComponenet as DateComponents, to: currentDate!)
return nextDate
}希望这能帮上忙!
https://stackoverflow.com/questions/44416831
复制相似问题