原来我写过一篇文章介绍如何计算当月、当年、或者指定年月的第一天、最后一天日期(点击查看)。有网友问要怎么得到指定周的的第一天、最后一天日期。下面我通过代码进行演示。
一、获取本周的第一天、最后一天日期
(1)这里定义两个方法,分别返回本周第一天日期(星期天),以及最后一天日期(星期六)。
//本周开始日期(星期天)
func startOfThisWeek() -> Date {
let date = Date()
let calendar = NSCalendar.current
let components = calendar.dateComponents(
Set([.yearForWeekOfYear, .weekOfYear]), from: date)
let startOfWeek = calendar.date(from: components)!
return startOfWeek
}
//本周结束日期(星期六)
func endOfThisWeek(returnEndTime:Bool = false) -> Date {
let calendar = NSCalendar.current
var components = DateComponents()
if returnEndTime {
components.day = 7
components.second = -1
} else {
components.day = 6
}
let endOfMonth = calendar.date(byAdding: components, to: startOfThisWeek())!
return endOfMonth
}
(2)测试样例
//创建一个日期格式器
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
//本周第一天日期
let startDate = startOfThisWeek()
print("本周开始时间:", dateFormatter.string(from: startDate as Date))
//本周最后一天日期1
let endDate1 = endOfThisWeek()
print("本周结束时间1:", dateFormatter.string(from: endDate1))
//本周最后一天日期2
let endDate2 = endOfThisWeek(returnEndTime: true)
print("本周结束时间2:", dateFormatter.string(from: endDate2))
(3)运行结果如下:
二、获取指定日期所在周的第一天、最后一天日期
(1)为方便使用,这里对 Date类进行扩展,这样就可以得到任意某个日期所在周的第一天、最后一天日期。
extension Date {
//该时间所在周的第一天日期(2017年12月17日 00:00:00)
var startOfWeek: Date {
let calendar = NSCalendar.current
let components = calendar.dateComponents(
Set([.yearForWeekOfYear, .weekOfYear]), from: self)
return calendar.date(from: components)!
}
//该时间所在周的最后一天日期(2017年12月23日 00:00:00)
var endOfWeek: Date {
let calendar = NSCalendar.current
var components = DateComponents()
components.day = 6
return calendar.date(byAdding: components, to: self.startOfWeek)!
}
//该时间所在周的最后一天日期(2017年12月23日 23:59:59)
var endTimeOfWeek: Date {
let calendar = NSCalendar.current
var components = DateComponents()
components.day = 7
components.second = -1
return calendar.date(byAdding: components, to: self.startOfWeek)!
}
}
(2)还是以本周的第一天、最后一天日期为例:
//创建一个日期格式器
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
//本周第一天日期
let startDate = Date().startOfWeek
print("本周开始时间:", dateFormatter.string(from: startDate))
//本周最后一天日期1
let endDate1 = Date().endOfWeek
print("本周结束时间1:", dateFormatter.string(from: endDate1))
//本周最后一天日期2
let endDate2 = Date().endTimeOfWeek
print("本周结束时间2:", dateFormatter.string(from: endDate2))
(3)运行结果如下: