Current Week Start and End Date

后端 未结 16 1324
轮回少年
轮回少年 2020-11-30 01:56

I want to get the current week start and end date and I also want to use the previous week start and end date and next week of the start and end date in current month.

相关标签:
16条回答
  • 2020-11-30 02:19

    Swift 3

    First find the current date...

        let today = Date()
        let gregorian = Calendar(identifier: .gregorian)
        var weekdayComponents: DateComponents? = gregorian.dateComponents([.weekday], from: today)
    

    Sunday = 1, Monday = 2, Tuesday = 3, Wednesday = 4, Thursday = 5, Friday = 6 and Saturday = 7.

        var componentsToSubtract = DateComponents()
        componentsToSubtract.day = (0 - (weekdayComponents?.weekday!)!) + 2
    
        beginningOfWeek = gregorian.date(byAdding: componentsToSubtract, to: today)
    
        var componentsToAdd: DateComponents? = gregorian.dateComponents([.day], from: beginningOfWeek!)
        componentsToAdd?.day = 6
        endOfWeek = gregorian.date(byAdding: componentsToAdd!, to: beginningOfWeek!)
    
        let components: DateComponents? = gregorian.dateComponents([.month], from: beginningOfWeek!)
        let month: Int? = components?.month
    
        let components1: DateComponents? = gregorian.dateComponents([.month], from: endOfWeek!)
        let month1: Int? = components1?.month
    
        print("\(month) - \(month1)")
    
        showDate(start:beginningOfWeek!, end:endOfWeek!, strtMn:month!, endMn:month1!)
    
    func showDate(start:Date, end:Date, strtMn:Int, endMn:Int) {
        if strtMn == endMn{
            let formatter = DateFormatter()
            formatter.dateFormat = "MMM dd"
            let stringFromDate: String = formatter.string(from: start)
    
            let formatter1 = DateFormatter()
            formatter1.dateFormat = "dd"
            let stringFromDate1: String = formatter1.string(from: end)
            print("\(stringFromDate) - \(stringFromDate1)")
            lblDate.text = "\(stringFromDate) - \(stringFromDate1)"
        }
        else{
            let formatter = DateFormatter()
            formatter.dateFormat = "MMM dd"
            let stringFromDate: String = formatter.string(from: start)
    
            let formatter1 = DateFormatter()
            formatter1.dateFormat = "MMM dd"
            let stringFromDate1: String = formatter1.string(from: end)
            print("\(stringFromDate) - \(stringFromDate1)")
            lblDate.text = "\(stringFromDate) - \(stringFromDate1)"
        }
    }
    

    for next and previous ....

    @IBAction func week_CalendarActionEvents(_ sender: UIButton) {
    
        let gregorian = Calendar(identifier: .gregorian)
        var offsetComponents = DateComponents()
        var nextStrtDate: Date?
        var nextEndDate: Date?
        var startDate: Date?
        var endDate: Date?
    
        startDate = beginningOfWeek
        endDate = endOfWeek
    
        if sender.tag == 1 {
            offsetComponents.day = -7
        }
        else if sender.tag == 2 {
            offsetComponents.day = 7
        }
    
        nextStrtDate = gregorian.date(byAdding: offsetComponents, to:startDate!)
        startDate = nextStrtDate
        beginningOfWeek = startDate
    
        nextEndDate = gregorian.date(byAdding: offsetComponents, to: endDate!)
        endDate = nextEndDate
        endOfWeek = endDate
    
        let components: DateComponents? = gregorian.dateComponents([.month], from: startDate!)
        let month: Int? = components?.month
    
        let components1: DateComponents? = gregorian.dateComponents([.month], from: endDate!)
        let month1: Int? = components1?.month
    
        print("\(month)- \(month1)")
    
        showDate(start:startDate!, end:endDate!, strtMn:month!, endMn:month1!)
    }
    
    0 讨论(0)
  • 2020-11-30 02:21
    //Begining of Week Date
    
    - (NSDate*) beginingOfWeekOfDate{
    
        NSCalendar *tmpCalendar = [NSCalendar currentCalendar];
        NSDateComponents *components = [tmpCalendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate:self];//get the required calendar units
    
        NSInteger weekday = tmpCalendar.firstWeekday;  
        components.weekday = weekday; //weekday
        components.hour = 0;
        components.minute = 0;
        components.second = 0;
    
        NSDate *fireDate = [tmpCalendar dateFromComponents:components];
    
        return fireDate;
    }
    
    //End of Week Date
    
    -(NSDate *)endOfWeekFromDate{
    
        NSCalendar *tmpCalendar = [NSCalendar currentCalendar];
        NSDateComponents *components = [tmpCalendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate:self];//get the required calendar units
    
        int weekday = 7; //Saturday
        if (tmpCalendar.firstWeekday != 1) {
            weekday = 1;
        }
        components.weekday = weekday;//weekday
        components.hour = 23;
        components.minute = 59;
        components.second = 59;
    
        NSDate *fireDate = [tmpCalendar dateFromComponents:components];
    
        return fireDate;
    }
    
    0 讨论(0)
  • 2020-11-30 02:24

    A Swift version

    of vikingosegundo's answer:

    let calendar = NSCalendar.currentCalendar()
    var startOfTheWeek: NSDate?
    var endOfWeek: NSDate!
    var interval = NSTimeInterval(0)
    
    calendar.rangeOfUnit(.WeekOfMonth, startDate: &startOfTheWeek, interval: &interval, forDate: NSDate())
    endOfWeek = startOfTheWeek!.dateByAddingTimeInterval(interval - 1)
    
    0 讨论(0)
  • 2020-11-30 02:26

    Here is a solution for the swift4, we can get all the days for the current week.

    var calendar = Calendar(identifier: Calendar.Identifier.gregorian)
    let today = calendar.startOfDay(for: Date())    
    let dayOfWeek = calendar.component(.weekday, from: today) - calendar.firstWeekday
    let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!
    let days = (weekdays.lowerBound ..< weekdays.upperBound)
                        .flatMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today) }
    
    0 讨论(0)
  • 2020-11-30 02:27

    Swift 4.2

    If you want to show the current week dates, here is the code.

      override func viewDidLoad() {
            super.viewDidLoad()
    
            for dateIndex in 0..<7 {
                guard let startWeek = Date().startOfWeek else { return }
                let date = Calendar.current.date(byAdding: .day, value: dateIndex + 1, to: startWeek)
                print(date)
            }
    
    }
    
    
    
    extension Date {
        var startOfWeek: Date? {
            let gregorian = Calendar(identifier: .gregorian)
            guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
            return gregorian.date(byAdding: .day, value: 1, to: sunday)
        }
    }
    
    
    0 讨论(0)
  • 2020-11-30 02:30

    Here is Swift 3 Version:-

    extension Date {
        var startOfWeek: Date? {
            let gregorian = Calendar(identifier: .gregorian)
            guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
            return gregorian.date(byAdding: .day, value: 1, to: sunday)
        }
    
        var endOfWeek: Date? {
            let gregorian = Calendar(identifier: .gregorian)
            guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
            return gregorian.date(byAdding: .day, value: 7, to: sunday)
        }
    }
    

    You can get the week start date and end date like this :

    let startWeek = Date().startOfWeek
    let endWeek = Date().endOfWeek
    
    print(startWeek ?? "not found start date")
    print(endWeek ?? "not found end date") 
    
    0 讨论(0)
提交回复
热议问题