结束日期显示错误 [英] End Date showing Wrong

查看:60
本文介绍了结束日期显示错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想查找开始日期和星期几的结束日期,但是找不到星期几的正确结束日期

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"
}

这篇关于结束日期显示错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆