我的开始日期是2020年7月13日,Int表示我选择的周数,在本例中是5周。我想打印这5周的每个周范围。预期输出的示例:
- 7月13日至7月19日
- 7月20日至7月26日
- 7月27日至8月2日
- 8月3日至8月9日
- 8月10日至8月16日
使用下面的代码,我能够获得前两周,但是,周应该继续打印取决于周的输入。
func getRanges() {
let arrWeekDates = rangeString!.getWeekDates() // Get dates of two weeks.
let dateFormat = "MMM dd"
let thisMon = arrWeekDates.thisWeek.first!.toDate(format: dateFormat)
let thisSun = arrWeekDates.thisWeek[arrWeekDates.thisWeek.count - 1].toDate(format: dateFormat)
let nextMon = arrWeekDates.nextWeek.first!.toDate(format: dateFormat)
let nextSun = arrWeekDates.nextWeek[arrWeekDates.nextWeek.count - 1].toDate(format: dateFormat)
print("This Week: \(thisMon) - \(thisSun)")
print("Next Week: \(nextMon) - \(nextSun)")
}
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 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)
}
}
2条答案
按热度按时间fquxozlt1#
我创建了一个函数,它以开始日期和周数为参数,并返回一个
DateInterval
数组,表示周的开始日期和结束日期使用它并打印出你能做的
其输出
7月13日至7月19日
7月20日至7月26日
7月27日-8月02日
8月3日-8月9日
8月10日至8月16日
q3qa4bjr2#
最近,我需要从给定的日期中获取一系列的周数,因此,我在@joakim-danielson answer中做了一些更改,并根据我的要求开发了一个代码。
输出:
25/09/2022 - 01/10/2022
2022年10月2日-2022年10月8日
2022年10月9日至10月15日
2022年10月16日至2022年10月22日
23/10/2022 - 29/10/2022
2022年10月30日-2022年11月5日
2022年11月6日-2022年11月12日
2022年11月13日至11月19日
20/11/2022 - 26/11/2022
2022年11月27日-2022年12月3日
2022年12月4日至12月10日
2022年12月11日至12月17日
2022年12月18日至2022年12月24日
25/12/2022 - 31/12/2022
2023年1月1日-2023年1月7日
2023年1月8日至14日
2023年1月15日-2023年1月21日
2023年1月22日至2023年1月28日
2023年1月29日-2023年2月4日
2023年2月5日至2023年2月11日
2023年2月12日至2023年2月18日
2023年2月19日至2023年2月25日
2023年2月26日至2023年3月4日
2023年3月5日至11月3日
2023年3月12日至3月18日
2023年3月19日-2023年3月25日
2023年3月26日-2023年4月1日