web-gelistirme-sc.com

Geçerli Hafta Başlangıç ​​ve Bitiş Tarihi

Geçerli haftanın başlangıç ​​ve bitiş tarihini almak istiyorum ve aynı zamanda önceki ayın... Haftanın başlangıç ​​ve bitiş tarihini ve başlangıç ​​ve bitiş tarihinin gelecek haftasını da geçerli ay içinde kullanmak istiyorum.

Şimdiden teşekkürler.

35
Rushabh

Destek için teşekkürler sorunu çözüyorum 

Kod: - Geçerli haftanın başlangıç ​​ve bitiş tarihini verir.

 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);
19
Rushabh

rangeOfUnit:startDate:interval:forDate: . Size belirli bir zaman birimi için başlangıç ​​ve aralık verir. Bununla beraber, kullanılan takvimde haftanın başlangıcını bulmak ve o haftanın son saniyesini almak için aralık-1'i eklemek kolaydır.

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.
62
vikingosegundo

İşte Swift 3 Sürümü: -

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

Hafta başlangıç ​​tarihini ve bitiş tarihini şu şekilde alabilirsiniz:

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

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

Swift sürümü

vikingosegundo 'ın cevabı :

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)
10
SoftDesigner

İşte Swift 3 (Xcode 8+) için zarif bir yol:

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

Ve bu eklentiyi şu şekilde kullanabiliriz:

print(Date().startOfWeek)
print(Date().endOfWeek)
8
elquimista

İlk önce geçerli tarihi bulun ...

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

Haftanın ilk gününü almak için bugünden çıkartılacak gün sayısını hesaplayın. Bu durumda, haftanın ilk günü Pazartesi. Bu, önce hafta içi tamsayı ile 0 çıkarıp ardından setDay'e 2 eklenerek temsil edilir.

Pazar = 1, Pazartesi = 2, Salı = 3, Çarşamba = 4, Perşembe = 5, Cuma = 6 ve Cumartesi = 7. Bu tamsayılara daha fazla ekleyerek, önümüzdeki hafta başlayacaksınız.

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]];

Haftanın ilk günü için tarih oluşturun

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

İlk günün tarihine 6 ekleyerek, son günü, örnek Pazar günü alabiliriz.

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

sonraki ve önceki için ....

-(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]];
}
4
Vikas S Singh

Swift 4 Çözümü

İhtiyacım doğrultusunda, takip etmek için tarihleri ​​buldum.

1. Today

2. Tomorrow 

3. This Week 

4. This Weekend 

5. Next Week 

6. Next Weekend

Bu yüzden, Geçerli Hafta ve Gelecek Hafta tarihlerini almak için Date Extension 'ı oluşturdum.

KODU

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

KULLANIM:

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

İhtiyacınıza göre Extension değiştirebilirsiniz.

Teşekkürler!

2
Rashesh Bosamiya

İşte bazı kodlar ve haftanın başlangıcının önceki aydan başladığı bir Edge durumunu kontrol ediyor. setWeekday öğesini 7 olarak ayarlayarak haftanın sonunu alabilir ve önceki haftayı 1'dan [components week] çıkararak alabilirsiniz

// 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];
}
2
iwasrobbed

İşte Swift4 için bir çözüm.

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) }
2
PrafulD
//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;
}
2
Sargis Gevorgyan

Hızlı 3

İlk önce geçerli tarihi bulun ...

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

Pazar = 1, Pazartesi = 2, Salı = 3, Çarşamba = 4, Perşembe = 5, Cuma = 6 ve Cumartesi = 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)"
    }
}

sonraki ve önceki için ....

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

NSDaterangeOfUnit:startDate:interval:forDate: yönteminden yararlanarak, bunu başarmanın daha basit bir yolu vardır:

- (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]];

Şimdi bu haftanın başlangıç ​​ve bitiş tarihlerine sahipsiniz. Sonra geçen hafta:

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

Gelecek hafta:

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

Şimdi hepsine sahipsin.

1
Albert Zhang

Aşağıdaki kodu kullanarak mevcut günü ve tarihi alabilirsiniz:

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

Şimdi, haftanın başlangıç ​​ve bitiş tarihlerini hesaplamak için bir mantık koymanız gerekir. Mantık böyle bir şey olacak 

eğer hafta günü Pazartesi ise 

sonra 

başlangıç ​​tarihi = geçerli tarih - 0

bitiş tarihi = geçerli tarih + 6

ve bunun gibi

Bence onun fikrini alabilirsin.

1
Sanchit Paurush

Swift 3+: Uzantılı basit çözüm

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

Swift 4.2

Geçerli hafta tarihlerini göstermek istiyorsanız, kod burada.

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

1
Rashid Latif

Swift 3.0'da 

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)!)
0
mangesh