2016-11-07 2 views
0

타임 스탬프가있는 분개 배열이 있습니다. 나는이를 검색 한음모를 꾸미기 위해 오늘, 어제의 NSDate 배열을 필터링하십시오.

오늘, 어제,이 등 주, 이번 달, 그리고 내 valuetimeCreated 음모와 라벨 X 축 항목에 대해이 배열을 필터링 할 수있는 방법

class JournalNoteEntry { 
var timeCreated: NSDate? 
var value: Int? 
var note: String? 
} 

이 기본적인 필요를 위해 많은 것을 해답을 찾을 수 없습니다.

사람이 ... timeCreated이 날짜 timeIntervalSince1970를 포함

+0

내가 시작 날짜의 배열을 만드는 게 좋을 것/오늘/어제/이번 주, 이번 달 등의 마감일을 비교합니다. – Larme

+0

NSPredicate를 사용해 보셨습니까? –

+0

@Larme 답장을 보내 주셔서 감사합니다. 일부 코드 게시하시기 바랍니다 –

답변

0

을 두 배로있는 NSDate에서 데이터 유형을 변환 도와주세요 수, 사용한다 당신의 문제에

class JournalNoteEntry { 
    var timeCreated: Date? 
    var value: Int? 
    var note: String? 
} 

:의이시를 쓸 수 재단의 클래스 (NS...로 시작하는 사람들은)보다는 네이티브 스위프트의 유형 mple은 시작과 끝 날짜 사이의 모든 항목에 대한 필터링 기능 : 당신의 노력의

func entries(in journal: [JournalNoteEntry], from: Date, to: Date) -> [JournalNoteEntry] { 
    return journal.filter { 
     guard let timeCreated = $0.timeCreated else { 
      return false 
     } 

     // Notice that this is half-open range 
     return from <= timeCreated && timeCreated < to 
    } 
} 

대부분의 날짜 범위를 결정하는 것입니다.

extension Calendar { 
    func todayRange() -> (Date, Date) { 
     let startDate = self.startOfDay(for: Date()) 
     let endDate = self.date(byAdding: .day, value: 1, to: startDate)! 
     return (startDate, endDate) 
    } 

    func yesterdayRange() -> (Date, Date) { 
     let endDate = self.startOfDay(for: Date()) 
     let startDate = self.date(byAdding: .day, value: -1, to: endDate)! 
     return (startDate, endDate) 
    } 

    func thisWeekRange() -> (Date, Date) { 
     var components = DateComponents() 
     components.weekday = self.firstWeekday 

     let startDate = self.nextDate(after: Date(), matching: components, matchingPolicy: .nextTime, direction: .backward)! 
     let endDate = self.nextDate(after: startDate, matching: components, matchingPolicy: .nextTime)! 
     return (startDate, endDate) 
    } 

    func thisMonthRange() -> (Date, Date) { 
     var components = self.dateComponents([.era, .year, .month], from: Date()) 
     components.day = 1 

     let startDate = self.date(from: components)! 
     let endDate = self.date(byAdding: .month, value: 1, to: startDate)! 

     return (startDate, endDate) 
    } 
} 

// Run this in Playground to see it formatted in your local timezone 
// If you call print(), it will always display in UTC 
// Assuming today = Nov 7, 2016 
Calendar.current.todayRange()  // "Nov 7, 2016, 12:00 AM", "Nov 8, 2016, 12:00 AM" 
Calendar.current.yesterdayRange() // "Nov 6, 2016, 12:00 AM", "Nov 7, 2016, 12:00 AM" 
Calendar.current.thisWeekRange() // "Nov 6, 2016, 12:00 AM", "Nov 13, 2016, 12:00 AM" 
Calendar.current.thisMonthRange() // "Nov 1, 2016, 12:00 AM", "Dec 1, 2016, 12:00 AM" 

는 현재 월 내의 모든 저널 항목을 얻으려면 : 그것을 할 수있는 한 가지 방법은 Calendar 클래스의 확장을 통해입니다

// journal is an array of JournalNoteEntry 
let (startDate, endDate) = Calendar.current.thisMonthRange() 
let results = entries(in: journal, from: startDate, to: endDate) 
+0

많은 코드를 게시 해 주셔서 감사합니다. 제 경우에는 매우 유용합니다. 그러나 당신은 어떻게 든 Swift 3을 사용하고 있다고 가정했습니다. 다음 달에 앱을 제출해야하고 모든 코드를 Swift 3으로 변환하고 싶지 않기 때문에 아닙니다. Swift 용 코드를 게시 할 수 있다면 고맙겠습니다. 2.1.1. 스위프트 3 코드는 다른 사람들에게 도움이 될 수 있습니다. 다시 한 번 감사드립니다! –

0
let predicate = NSPredicate(format: "timeCreated == %f", NSDate().timeIntervalSince1970) 
let arrFiltedArray = array .filteredArrayUsingPredicate(predicate) 

는 의미는 스위프트 3에 기록되어 있기 때문에