Дата начала и окончания текущей недели

Я хочу получить дату начала и окончания текущей недели, а также использовать дату начала и окончания предыдущей недели и следующую неделю даты начала и окончания текущего месяца.

Заранее спасибо.

18 ответов

Решение

Я решаю проблему спасибо за поддержку

Код:- дает дату начала и окончания текущей недели.

 NSDate *today = [NSDate date];
 NSLog(@"Today date is %@",today);
 dateFormat = [[NSDateFormatter alloc] init];
 [dateFormat setDateFormat:@"yyyy-MM-dd"];// you can use your format.

 //Week Start Date 

 NSCalendar *gregorian = [[NSCalendar alloc]        initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];

int dayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week

[components setDay:([components day] - ((dayofweek) - 2))];// for beginning of the week.

NSDate *beginningOfWeek = [gregorian dateFromComponents:components];
NSDateFormatter *dateFormat_first = [[NSDateFormatter alloc] init];
[dateFormat_first setDateFormat:@"yyyy-MM-dd"];
dateString2Prev = [dateFormat stringFromDate:beginningOfWeek];

weekstartPrev = [[dateFormat_first dateFromString:dateString2Prev] retain];

NSLog(@"%@",weekstartPrev);


//Week End Date

 NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

 NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];

 int Enddayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week

 [componentsEnd setDay:([componentsEnd day]+(7-Enddayofweek)+1)];// for end day of the week

 NSDate *EndOfWeek = [gregorianEnd dateFromComponents:componentsEnd];
 NSDateFormatter *dateFormat_End = [[NSDateFormatter alloc] init];
 [dateFormat_End setDateFormat:@"yyyy-MM-dd"];
 dateEndPrev = [dateFormat stringFromDate:EndOfWeek];

 weekEndPrev = [[dateFormat_End dateFromString:dateEndPrev] retain];
  NSLog(@"%@",weekEndPrev);

rangeOfUnit:startDate:interval:forDate:, Это дает вам начало и интервал для определенной единицы времени. С его помощью легко найти начало недели в используемом календаре и добавить диапазон -1, чтобы получить самую последнюю секунду на этой неделе.

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSWeekCalendarUnit 
       startDate:&startOfTheWeek 
        interval:&interval 
         forDate:now];
//startOfWeek holds now the first day of the week, according to locale (monday vs. sunday)

endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval-1];
// holds 23:59:59 of last day in week.

Вот версия Swift 3:-

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

Вы можете получить дату начала и окончания недели следующим образом:

let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek

print(startWeek ?? "not found start date")
print(endWeek ?? "not found end date") 

Версия Swift

из vikingosegundo ответ:

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)

Вот элегантный способ для Swift 3 (Xcode 8+):

extension Date {
    var startOfWeek: Date {
        let date = Calendar.current.date(from: Calendar.current.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
        let dslTimeOffset = NSTimeZone.local.daylightSavingTimeOffset(for: date)
        return date.addingTimeInterval(dslTimeOffset)
    }

    var endOfWeek: Date {
        return Calendar.current.date(byAdding: .second, value: 604799, to: self.startOfWeek)!
    }
}

И мы можем использовать это расширение следующим образом:

print(Date().startOfWeek)
print(Date().endOfWeek)

Решение для Swift 5.x

Создать расширение даты :

      func weekPeriod() -> (startDate: Date, endDate: Date) {
    let calendar = Calendar(identifier: .gregorian)
    guard let sundayDate = calendar.date(from: calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return (startDate: Date(), endDate: Date()) }
    
    if calendar.isDateInToday(sundayDate) {
        let startDate = calendar.date(byAdding: .day, value: -6, to: sundayDate) ?? Date()
        let endDate = sundayDate
        return (startDate: startDate, endDate: endDate)
    }
    
    let startDate = calendar.date(byAdding: .day, value: 1, to: sundayDate) ?? Date()
    let endDate = calendar.date(byAdding: .day, value: 6, to: startDate) ?? Date()
    
    return (startDate: startDate, endDate: endDate)
}

Swift 4 Solution

Я выяснил в соответствии с моим требованием, где я узнал даты для следующих.

1. Today

2. Tomorrow 

3. This Week 

4. This Weekend 

5. Next Week 

6. Next Weekend

Итак, я создал Date Extension чтобы получить даты текущей недели и следующей недели.

КОД

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 tomorrow: Date {
        return Calendar.current.date(byAdding: .day, value: 1, to: noon)!
    }
    var noon: Date {
        return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
    }

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

ИСПОЛЬЗОВАНИЕ:

let arrWeekDates = Date().getWeekDates() // Get dates of Current and Next week.
let dateFormat = "MMM dd" // Date format
let thisMon = arrWeekDates.thisWeek.first!.toDate(format: dateFormat)
let thisSat = arrWeekDates.thisWeek[arrWeekDates.thisWeek.count - 2].toDate(format: dateFormat)
let thisSun = arrWeekDates.thisWeek[arrWeekDates.thisWeek.count - 1].toDate(format: dateFormat)

let nextMon = arrWeekDates.nextWeek.first!.toDate(format: dateFormat)
let nextSat = arrWeekDates.nextWeek[arrWeekDates.nextWeek.count - 2].toDate(format: dateFormat)
let nextSun = arrWeekDates.nextWeek[arrWeekDates.nextWeek.count - 1].toDate(format: dateFormat)

print("Today: \(Date().toDate(format: dateFormat))") // Sep 26
print("Tomorrow: \(Date().tomorrow.toDate(format: dateFormat))") // Sep 27
print("This Week: \(thisMon) - \(thisSun)") // Sep 24 - Sep 30
print("This Weekend: \(thisSat) - \(thisSun)") // Sep 29 - Sep 30
print("Next Week: \(nextMon) - \(nextSun)") // Oct 01 - Oct 07
print("Next Weekend: \(nextSat) - \(nextSun)") // Oct 06 - Oct 07

Вы можете изменить Extension в соответствии с вашими потребностями.

Спасибо!

Сначала найдите текущую дату...

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents     = [gregorian components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];

Подсчитайте количество дней, которые нужно вычесть с сегодняшнего дня, чтобы получить первый день недели. В этом случае первый день недели - понедельник. Это представляется первым вычитанием 0 с целым числом дня недели, за которым следует добавление 2 к setDay.

Воскресенье = 1, понедельник = 2, вторник = 3, среда = 4, четверг = 5, пятница = 6 и суббота = 7. Добавив больше к этим целым числам, вы перейдете на следующую неделю.

NSDateComponents *componentsToSubtract  = [[NSDateComponents alloc] init];
[componentsToSubtract setDay: (0 - [weekdayComponents weekday]) + 2];   
[componentsToSubtract setHour: 0 - [weekdayComponents hour]];
[componentsToSubtract setMinute: 0 - [weekdayComponents minute]];
[componentsToSubtract setSecond: 0 - [weekdayComponents second]];

Создать дату первого дня недели

NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0];

Добавляя 6 к дате первого дня, мы можем получить последний день, в нашем примере воскресенье.

NSDateComponents *componentsToAdd = [gregorian components:NSDayCalendarUnit fromDate:beginningOfWeek];
[componentsToAdd setDay:6];
NSDate *endOfWeek = [gregorian dateByAddingComponents:componentsToAdd toDate:beginningOfWeek options:0];

для следующего и предыдущего....

-(IBAction)Week_CalendarActionEvents:(id)sender{

    NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDateComponents *offsetComponents = [[[NSDateComponents alloc] init] autorelease];
    NSDate *nextDate;

    if(sender==Week_prevBarBtn)  // Previous button events 
        [offsetComponents setDay:-7];
    else if(sender==Week_nextBarBtn) // next button events 
        [offsetComponents setDay:7];

    nextDate = [gregorian dateByAddingComponents:offsetComponents toDate:selectedDate options:0];

    selectedDate = nextDate;
    [selectedDate retain];

    NSDateComponents *components = [gregorian components:NSWeekCalendarUnit fromDate:selectedDate];
    NSInteger week = [components week];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMMM YYYY"];
    NSString *stringFromDate = [formatter stringFromDate:selectedDate];
    [formatter release];
    [Week_weekBarBtn setTitle:[NSString stringWithFormat:@"%@,Week %d",stringFromDate,week]];
}

Вот решение для swift4, мы можем получить все дни текущей недели.

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

Вот некоторый код, и он также проверяет крайний случай, когда начало недели начинается в предыдущем месяце. Вы можете получить конец недели, установив setWeekday в 7 и вы можете получить предыдущую неделю, вычитая 1 от [components week]

// Finds the date for the first day of the week
- (NSDate *)getFirstDayOfTheWeekFromDate:(NSDate *)givenDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Edge case where beginning of week starts in the prior month
    NSDateComponents *edgeCase = [[NSDateComponents alloc] init];
    [edgeCase setMonth:2];
    [edgeCase setDay:1];
    [edgeCase setYear:2013];
    NSDate *edgeCaseDate = [calendar dateFromComponents:edgeCase];

    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:edgeCaseDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Edge case date is %@ and beginning of that week is %@", edgeCaseDate , [calendar dateFromComponents:components]);

    // Find Sunday for the given date
    components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:givenDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Original date is %@ and beginning of week is %@", givenDate , [calendar dateFromComponents:components]);

    return [calendar dateFromComponents:components];
}
//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;
}

Swift 3+: простое решение с расширением

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

    var yesterdayDate: Date? {
        return NSCalendar.current.date(byAdding: .day, value: -1, to: noon)!
    }

    var tommorowDate: Date? {
        return NSCalendar.current.date(byAdding: .day, value: 1, to: noon)!
    }

    var previousDate: Date? {
        let oneDay:Double = 60 * 60 * 24
        return self.addingTimeInterval(-(Double(oneDay)))
    }

    var nextDate: Date? {
        let oneDay:Double = 60 * 60 * 24
        return self.addingTimeInterval(oneDay)
    }

    var noon: Date {
        return NSCalendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
    }

    var month: Int {
        return Calendar.current.component(.month,  from: self)
    }
}

Воспользуйтесь преимуществом метода rangeOfUnit:startDate:interval:forDate: из NSDateЕсть более простой способ добиться этого:

- (void)startDate:(NSDate **)start andEndDate:(NSDate **)end ofWeekOn:(NSDate *)date{
    NSDate *startDate = nil;
    NSTimeInterval duration = 0;
    BOOL b = [[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit startDate:&startDate interval:&duration forDate:date];
    if(! b){
        *start = nil;
        *end = nil;
        return;
    }
    NSDate *endDate = [startDate dateByAddingTimeInterval:duration-1];
    *start = startDate;
    *end = endDate;
}

NSDate *this_start = nil, *this_end = nil;
[self startDate:&this_start andEndDate:&this_end ofWeekOn:[NSDate date]];

Так что теперь у вас есть дата начала и окончания этой недели. Тогда на прошлой неделе:

NSDate *lastWeekDate = [this_start dateByAddingTimeInterval:-10];
NSDate *last_start = nil, *last_end = nil;
[self startDate:&last_start andEndDate:&last_end ofWeekOn:lastWeekDate];

Следующая неделя:

NSDate *nextWeekDate = [this_end dateByAddingTimeInterval:10];
NSDate *next_start = nil, *next_end = nil;
[self startDate:&next_start andEndDate:&next_end ofWeekOn:nextWeekDate];

Теперь у вас есть все.

Свифт 3

Сначала найдите текущую дату...

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

Воскресенье = 1, понедельник = 2, вторник = 3, среда = 4, четверг = 5, пятница = 6 и суббота = 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)"
    }
}

для следующего и предыдущего....

@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!)
}

Вы можете узнать текущий день и дату по следующему коду:

NSDate *today = [NSDate date];
    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setDateFormat:@"EEEE"];
    NSString *weekDay = [dateFormat stringFromDate:today];
    [dateFormat setDateFormat:@"dd"];
    NSString *thedate=[dateFormat stringFromDate:today];
    //[dateFormat release];
    NSLog(@"%@ %@", weekDay,thedate);

Теперь вам нужно добавить в него некоторую логику, чтобы вычислить дату начала и дату окончания недели. Логика будет такой,

если день недели понедельник

затем

дата начала = текущая дата - 0

дата окончания = текущая дата + 6

и так далее

Я думаю, вы можете понять это.

Swift 4.2

Если вы хотите показать даты текущей недели, вот код.

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

  • Есть 3 шага, чтобы получить Start dateа также End dateнедели из любого региона.
  1. Найти день недели текущего дня.
      func getTodayWeekDay() -> String {
       let dateFormatter = DateFormatter()
       dateFormatter.dateFormat = "EEEE"
       let weekDay = dateFormatter.string(from: Date())
       return weekDay
}
  1. Сделать эмун класс для и дней.

т.е. если текущий день недели Wednesdayзатем для получения Mondayтекущей недели мы должны вычесть -2с текущего дня. И для получения Sundayтекущей недели мы должны добавить 4в текущий день.

      enum WeekDays: String {
    case monday = "Monday"
    case tuesday = "Tuesday"
    case wednesday = "Wednesday"
    case thursday = "Thursday"
    case friday = "Friday"
    case saturday = "Saturday"
    case sunday = "Sunday"
    
    var daysToSubstract: Int {
        switch self {
        case .monday: return 0
        case .tuesday: return -1
        case .wednesday: return -2
        case .thursday: return -3
        case .friday: return -4
        case .saturday: return -5
        case .sunday: return -6
        }
    }
    
    var daysToAdd: Int {
        switch self {
        case .monday: return 6
        case .tuesday: return 5
        case .wednesday: return 4
        case .thursday: return 3
        case .friday: return 2
        case .saturday: return 1
        case .sunday: return 0
        }
    }
}

  1. Получить Start-weekа также End-weekпо subtractionа также additionс текущего дня.
      extension Date {
    var startOfWeek: String? {
        let gregorian = Calendar(identifier: .gregorian)
        let startWeek = dateFormatter.string(from:gregorian.date(byAdding: .day, value: WeekDays(rawValue: getTodayWeekDay())?.daysToSubstract ?? 0, to: self)!)
        print("start-week--- \(startWeek)")
        return startWeek
    }

    var endOfWeek: String? {
        let gregorian = Calendar(identifier: .gregorian)
        let endWeek = dateFormatter.string(from:gregorian.date(byAdding: .day, value: WeekDays(rawValue: getTodayWeekDay())?.daysToAdd ?? 6, to: self)!)
        print("end-week--- \(endWeek)")
        return endWeek
    }
}
  • Вы можете использовать функции, как показано ниже:
      Date().startOfWeek
Date().endOfWeek

В Swift 3.0

let cal = NSCalendar.current


//weekday
let weekday = cal.component(.weekday, from: Date())

var dateComp = cal.dateComponents([.hour, .minute, .second, .day, .month, .year], from: Date())
print(dateComp.day!)


//Start Date of the week - Sunday
dateComp.day = dateComp.day! - (weekday - 1)// start date of week

print(cal.date(from: dateComp)!)


//End Date of the Week - Saturday
dateComp = cal.dateComponents([.hour, .minute, .second, .day, .month, .year], from: Date())


dateComp.day = dateComp.day! + (7 - weekday)

print(cal.date(from: dateComp)!)
Другие вопросы по тегам