2016-07-27 3 views
0

Dies ist ein Code ich online gefunden, um alle Termine für die aktuelle Woche basierend auf dem heutigen Datum zu erhalten. Wenn das Datum der Anfang des Monats ist, zum Beispiel Donnerstag 01. September 2016 dann beginnt die Woche von Donnerstag und endet die Woche um Mittwoch 07 September 2016. Das stört mich wirklich, wenn das Datum das Ende des Monats ist; Sonntag 31 Juli 2016 dann wird es auf Montag beginnen und auf Sonntag in dieser Woche, die genau das ist, was ich will.Erhalten Sie alle Daten für die aktuelle Woche zurückkehrt falsch, wenn das Datum Anfang eines Monats ist

Dies könnte ein Duplikat sein, aber ich verbrachte eine Weile mit ähnlichen Fragen und ich bin immer noch fest.

Edit: Gibt es eine Möglichkeit alle Daten für die aktuelle Woche zurückzukehren, basierend auf dem aktuellen Datum (Und wenn Sie Zeit haben, in der nächste Woche auch?)

func formatDate(date: NSDate) -> String { 
    let format = "EEEE MMMM dd yyyy" 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = format 
    return formatter.stringFromDate(date) 

} 
// =======================================================================// 
//     THIS WEEK DATES          // 
// =======================================================================// 
func formattedDaysInThisWeek() -> [String] { 
    // create calendar 
    let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)! 

    // today's date 
    let today = NSDate() 
    let todayComponent = calendar.components([.Day, .Month, .Year], fromDate: today) 
    let components = calendar.components([.Weekday], fromDate: today) 



    // range of dates in this week 
    let thisWeekDateRange = calendar.rangeOfUnit(.Day, inUnit:.WeekOfMonth, forDate:today) 


    // date interval from today to beginning of week 
    let dayInterval = thisWeekDateRange.location - todayComponent.day 
    print(thisWeekDateRange.location) 
    print(todayComponent.day) 


    // date for beginning day of this week, ie. this week's Sunday's date 

    if components.weekday == 1 { 
     print("Is a sunday") 
     let beginningOfWeek = calendar.dateByAddingUnit(.Day, value: -6, toDate: today, options: .MatchNextTime) 

     var formattedDays: [String] = [] 

     for i in 0 ..< 7 { 
      let date = calendar.dateByAddingUnit(.Day, value: i, toDate: beginningOfWeek!, options: .MatchNextTime)! 
      formattedDays.append(formatDate(date)) 

     } 
     return formattedDays 
    } else { 
     print("Not a sunday") 
     let beginningOfWeek = calendar.dateByAddingUnit(.Day, value: dayInterval, toDate: today, options: .MatchNextTime) 

     var formattedDays: [String] = [] 

     for i in 1 ..< thisWeekDateRange.length + 1 { 
      let date = calendar.dateByAddingUnit(.Day, value: i, toDate: beginningOfWeek!, options: .MatchNextTime)! 
      formattedDays.append(formatDate(date)) 

     } 

     return formattedDays 
    } 


} 

Antwort

2

Diese Lösung überprüft, ob das aktuelle Datum Montag.

Wenn ja, es ist der Anfang der Woche ist, wenn keine, zurück Montag der Vergangenheit an.

Es verwendet auch die formatDate Funktion.

func formattedDaysInThisWeek() -> [String] { 
    // create calendar 
    let calendar = Calendar(identifier: .gregorian) 

    // today's date 
    let today = Date() 

    let weekday = calendar.component(.weekday, from: today) 
    let beginningOfWeek : Date 
    if weekday != 2 { // if today is not Monday, get back 
     let weekDateConponent = DateComponents(weekday: 2) 
     beginningOfWeek = calendar.nextDate(after: today, matching: weekDateConponent, matchingPolicy: .nextTime, direction: .backward)! 

    } else { // today is Monday 
     beginningOfWeek = calendar.startOfDay(for: today) 
    } 
    var formattedDays = [String]() 
    for i in 0..<7 { 
     let date = calendar.date(byAdding: .day, value: i, to: beginningOfWeek)! 
     formattedDays.append(formatDate(date)) 
    } 
    return formattedDays 
} 
+0

Das hat funktioniert, danke. –

0

I don? ‚t wissen, ob es eine tatsächliche Frage hier, aber ich schrieb einen kurzen Schnipsel, die Ihnen immer der Sonntag der aktuellen Woche geben:

let today = NSDate() 
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)! 
let todayComps = calendar.components([.Day, .Month, .Year], fromDate: today) 
let dayOfWeekComps = calendar.components([.Weekday], fromDate: today) 
todayComps.day -= (dayOfWeekComps.weekday - 1) 
let sunday = calendar.dateFromComponents(todayComps) 
+0

Sorry für nicht klar, ich habe die Frage aktualisiert. –

Verwandte Themen