我需要获取一周中给定日期的日期列表。
举个例子: 如果用户从选择器中选择随机日期如2017-6-7, 我需要得到并显示一周的日期。 [2017-6-4,2017-6-5,2017-6-6,2017-6-7,2017-6-8,2017-6-9,2017-6-10]
我无法在互联网上找到任何解决方案。
谢谢
答案 0 :(得分:4)
试试这个:
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)
.flatMap { 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日(星期六)
从孟加拉国开始
以上是我的日历的默认行为,它是从星期日开始的原因
如果你想从星期一开始,那就做这个改变:
let dayOfWeek = calendar.component(.weekday, from: dateInWeek) - 1
这取决于您日历所在的区域设置。
答案 1 :(得分:1)
这是使用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)!)
}
答案 2 :(得分:0)
你可以使用它。
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
}
希望这会有所帮助!