2017-02-25 3 views
1

私は自分のオブジェクトの1つのタイムスタンプと将来の30日の間の日付の配列を取得しようとしています。2つの日付の間にある日付の配列を返すメソッド - Swift 3

私は以下のコードを使用しましたが、希望の結果が得られず、タイトルに記載されているメソッドを作成しようとしています。どんな助けも素晴らしいだろう、ありがとう。

var dates = [Date]() 
    func fetchDays() { 
      let cal = Calendar.current 

      var dateComponents = DateComponents() 
      dateComponents.year = 2017 
      dateComponents.month = 2 
      dateComponents.day = 12 

      guard let startDate = cal.date(from: dateComponents) else { 
       return } 

      var start = cal.startOfDay(for: startDate) 

      for _ in 0 ... 30 { 
    guard let daysBetween = cal.date(byAdding: .day, value: 1, to: startDate) else { return } 
       start = daysBetween 
       dates.append(start) 
      } 
     } 

答えて

2

あなたの配列が何度も同じ日付で満たされているので、あなたは、同じ開始日に1を加えています。単にループインデックス+ 1

for i in 0 ... 30 { 
    if let newDate = cal.date(byAdding: .day, value: i + 1, to: startDate) { 
     dates.append(newDate) 
    } 
} 

1を置き換えるそして、あなたはstart変数は必要ありません。

+0

oh my gosh 。本当にありがとう! – Breezy

0

こんにちは@Breezyそれを動作させるためにあなたがの値は、次のように開始のためのパラメータに小さなこと

変更変更するだけで済みます:あなたドン場合

:編集

for _ in 0 ... 30 { 
    guard let daysBetween = cal.date(byAdding: .day, value: 1, to: start) else { return } 
       start = daysBetween 
       dates.append(start) 
      } 

を30日を使用したい場合は、月末を追加して次のような2つの日付の間の日を取得できます。

var dates = [Date]() 
     func fetchDays() { 
      let cal = Calendar.current 

      var dateComponents = DateComponents() 
      dateComponents.year = 2017 
      dateComponents.month = 2 
      dateComponents.day = 12 

      guard let startDate = cal.date(from: dateComponents) else { 
       return } 

      var start = cal.startOfDay(for: startDate) 
      guard let endDate = cal.date(byAdding: .month, value: 1, to: start) else { return } 

      guard let daysBetween = cal.dateComponents([.day], from: start, to: endDate).day else { return } 

      for _ in 0 ... daysBetween { 
       guard let newDate = cal.date(byAdding: .day, value: 1, to: start) else { return } 
       start = newDate 
       dates.append(newDate) 
      } 
     } 
+0

プロジェクトの後半で、必要な日数の長さが月から100日に変更される可能性があります。そのため、代わりに2つの日付を使用するのが最善だと思っています。しかし、ありがとう!これは本当に助けになりました。 – Breezy

関連する問題