2016-07-27 12 views
0

これは今日の日付に基づいて今週のすべての日付を取得するためにオンラインで見つかったコードです。たとえば、木曜日の9月1日の2016年ののような日付の場合は、木曜日のから週が始まり、水曜日の9月7日の2016で週を終了します。これは本当に私を悩ましています。その理由は、日付が月末である場合です。 日曜日7月31日2016月曜日から始まり、日曜日、で終了します。これは、私が欲しいものです。日付が月の始まりである場合、今週のすべての日付を返す

これは重複しているかもしれませんが、似たような質問をしているうちに私はまだ過ごしました。

編集: は、現在の日付に基づいて、現在の週のすべての日付を返す方法はあります(そして、あなたは同様に、来週時間があれば?)

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 
    } 


} 

答えて

2

このソリューションをチェックし、現在の日付が月曜日である場合。

はい場合、それは週の初めだ、なし場合、戻って過去の月曜日に取得します。

また、formatDate機能を使用しています。

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

これはうまくいきました、ありがとうございます。 –

0

Iドン?ここでは、実際の質問があります場合は、」tは知っているが、私はいつもあなたの現在の週の日曜日を与える迅速なスニペットを書いた:

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

申し訳ありませんが、私は質問を更新しました。 –

関連する問題