2017-07-21 27 views
-1

除くと、前現在と次の週を取得。土曜日/日曜日</strong><strong>を除く金曜日</strong>私は<strong>月曜日</strong><strong>から日付/曜日を表示したい土曜日と日曜日

enter image description here

私のシナリオ:

  1. 画面がロードすると、現在の週が表示されるはずです。 [次へ]ボタンをクリック(DisplayedWeek + 1)で
  2. - 以前のボタンクリックで
  3. (1 DisplayedWeek )。

自分の仕事

いくつかの研究の後にこれは私がしようとしているものです。私の場合は

 let calendar = Calendar.current 

     let currentDate = calendar.startOfDay(for: Date()) 

     /* value = 0 for current, 
      value = 1 for next, 
      value = -1 for previous week. 

     */ 
     let nextWeek:Date = calendar.date(byAdding: .weekOfMonth, value: 1, to: currentDate)! as Date 

     let dayOfWeek = calendar.component(.weekday, from: nextWeek) 
     let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: nextWeek)! 

     let days = (weekdays.lowerBound ..< weekdays.upperBound).flatMap { 

      calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: nextWeek) 

     }.filter { !calendar.isDateInWeekend($0) } 

     // Week Days from monday to friday 
     let formatter = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd" 

     for date in days { 
      print(formatter.string(from: date)) 
     } 

日は、それが来週表示されるはずです土曜日または日曜日ですが、それは同じ週表示されている場合。

+2

「のタイムゾーン関連の問題は、」あなたが持っている何?問題をはっきりと示す[mcve]を示してください。 –

+0

@MartinRいくつかの詳細が追加されました – Maddy

答えて

3

は、あなただけの、current week monday's dateを取得し、配列に追加し、それに1日を加算し、最後の配列要素をマッピングする必要があります。

extension Calendar { 
    static let iso8601 = Calendar(identifier: .iso8601) 
} 
extension Date { 
    var cureentWeekMonday: Date { 
     return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: Date()))! 
    } 
    var currentWeekdays: [Date] { 
     var weekdays = [cureentWeekMonday] 
     (1...4).forEach({ _ in weekdays.append(Calendar.iso8601.date(byAdding: DateComponents(day: 1), to: weekdays.last!)!) }) 
     return weekdays 
    } 
} 

let currentWeekdays = Date().currentWeekdays 
print(currentWeekdays) // ["Jul 17, 2017, 12:00 AM", "Jul 18, 2017, 12:00 AM", "Jul 19, 2017, 12:00 AM", "Jul 20, 2017, 12:00 AM", "Jul 21, 2017, 12:00 AM"] 
+0

前の/次の週を表示するには? – Maddy

+0

現在の日が土曜日または日曜日の場合は同じ週を表示し、次の週は表示したい場合。 – Maddy

+0

今週の週に1週間を加算または減算するだけです。配列要素 –

関連する問題