本文介绍了结束日期显示错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想查找开始日期和星期几的结束日期,但是找不到星期几的正确结束日期
I want to find start date and end date of week I am geting start date but not find right end date of week
startDate = NSDate().startOfWeek(2)
print(startDate)
endDate = startDate.endOfWeek(3)
print(endDate)
我正在将此开始日期-2016-07-04 06:30:00 +0000和结束日期-5828963-12-20 00:00:00 +0000
I am getting this start date -2016-07-04 06:30:00 +0000 and end date - 5828963-12-20 00:00:00 +0000
extension NSDate {
func startOfWeek(weekday: Int?) -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = cal.components([.YearForWeekOfYear, .WeekOfYear], fromDate: self) else { return nil }
comp.to12pm()
cal.firstWeekday = weekday ?? 1
return cal.dateFromComponents(comp)!
}
func endOfWeek(weekday: Int) -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = cal.components([.WeekOfYear], fromDate: self) else { return nil }
comp.weekOfYear = 1
comp.day -= 1
comp.to12pm()
return cal.dateByAddingComponents(comp, toDate: self.startOfWeek(weekday)!, options: [])!
}
}
internal extension NSDateComponents {
func to12pm() {
self.hour = 12
self.minute = 0
self.second = 0
}
}
推荐答案
extension Date {
enum Weekday: Int {
case sunday = 1, monday, tuesday, wednesday, thursday, friday, saturday
}
func startOfWeek(_ firstWeekday: Weekday = .sunday) -> Date? {
var cal = Calendar.current
var dateComponents = cal.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)
dateComponents.setTimeComponentsToNoon()
cal.firstWeekday = firstWeekday.rawValue
return cal.date(from: dateComponents)
}
func endOfWeek(_ firstWeekday: Weekday = .sunday) -> Date? {
guard let startOfWeek = startOfWeek(firstWeekday) else { return nil }
var dateComponents = DateComponents()
dateComponents.weekOfYear = 1
dateComponents.day = -1
return Calendar.current.date(byAdding: dateComponents, to: startOfWeek)
}
}
extension DateComponents {
mutating func setTimeComponentsToNoon() {
self.hour = 12
self.minute = 0
self.second = 0
self.nanosecond = 0
}
}
测试:
Testing:
if let startDate = Date().startOfWeek(.monday),
let endDate = Date().endOfWeek(.monday) {
print(startDate) // "2020-02-03 15:00:00 +0000\n"
print(endDate) // "2020-02-09 15:00:00 +0000\n"
}
if let startDate = Date().startOfWeek(),
let endDate = Date().endOfWeek() {
print(startDate) // "2020-02-02 15:00:00 +0000\n"
print(endDate) // "2020-02-08 15:00:00 +0000\n"
}
这篇关于结束日期显示错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!