2017-09-22 2 views
-5

'날짜'문자열의 배열을 신속하게 현재보다 크고 작음 인 date과 비교하는 방법. 이것은 서버에서 가져 오는 배열입니다.날짜 배열을 현재 날짜보다 큰 것으로 비교하는 방법

"leave_dates": [ 
     "03-09-2017", 
     "04-09-2017", 
     "05-09-2017", 
     "04-09-2017", 
     "01-09-2017", 
     "07-09-2017", 
     "09-09-2017", 
     "10-09-2017", 
     "12-09-2017", 
     "13-09-2017", 
     "15-09-2017", 
     "16-09-2017", 
     "23-09-2017" 
    ], 
+4

날짜 배열이 아닙니다. 그것은 문자열 배열입니다. – rmaddy

+1

'(NS) DateFormatter''(NS) String' <->'(NS) Date'를하기 위해서입니다. – Larme

+2

당신의 시도한 코드는 어디입니까 !!! –

답변

0

처럼 사용할 수 있습니다. 나는 다른 사람들에게 도움이 될만한 대답을 게시하고 있습니다.

extension Date { 
    var startOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 1, to: sunday) 
    } 

    var endOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 7, to: sunday) 
    } 
    func generateDatesArrayBetweenTwoDates(startDate: Date , endDate:Date) ->[Date] 
    { 
     var datesArray: [Date] = [Date]() 
     var startDate = startDate 
     let calendar = Calendar.current 
     let fmt = DateFormatter() 
     fmt.dateFormat = "dd-MM-YYYY" 
     while startDate <= endDate { 
      datesArray.append(startDate) 
      startDate = calendar.date(byAdding: .day, value: 1, to: startDate)! 
     } 
     return datesArray 
    } 
} 

저는 이와 같은 기능을 사용하고 있습니다.

func dateList() { 
     let startWeek = Date().startOfWeek 
     let endWeek = Date().endOfWeek 
     datesBetweenArray = Date().generateDatesArrayBetweenTwoDates(startDate: startWeek! , endDate: endWeek!) as NSArray 
     print(datesBetweenArray) 
} 
1

당신이 변환해야합니다 먼저 당신의 string dateDate 객체로, 당신은 DateFormatter를 사용하여이 작업을 수행. 날짜로 변환

let dates = ["03-09-2017", "04-09-2017", "05-09-2017", "04-09-2017", "01-09-2017", "07-09-2017", "09-09-2017", "10-09-2017", "12-09-2017", "13-09-2017", "15-09-2017", "16-09-2017", "23-09-2017"] 

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd-MM-yyyy" 

let greaterThanToday = dates.filter({ dateFormatter.date(from: $0)! > Date() }) 
print(greaterThanToday) // ["23-09-2017"] 
+0

이것은 err0r 내가 당신에게 코드를 사용하고 있습니다 --- '(String) -> Bool'형식의 값을 'NSPredicate'의 예상 인수 형식으로 변환 할 수 없음 – Ram

+1

@ kishan이 오류는 의미가 없습니다. 어떻게 지금까지 시도 –

+0

나는 배열을 내 JSON 배열에 할당하고 있는데 (서버 배열에서 가져 오는 중) – Ram

0

사용 Dateformtter 클래스를 다음 오늘 날짜와 비교 : 그럼 당신은 날짜가 오늘보다 큰 경우 확인하기 위해 filter을 사용할 수 있습니다. CustomDateFormatter에 코드를 래핑하고 정적 함수를 사용하여 날짜를 비교하고 bool을 반환 할 수 있습니다.

class CustomDateFormatter { 

    // MARK: - Properties 
    private static var dateFormatter: DateFormatter { 
     let formatter = DateFormatter() 
     formatter.dateFormat = "dd-MM-yyyy" 
     return formatter 
    } 

    // MARK: - Public 
    static func date(from string: String) -> Date? { 
     return dateFormatter.date(from: string) 
    } 

    static func campare(_ string: String, with date: Date = Date()) -> Bool { 
     guard let newDate = dateFormatter.date(from: string) else { 
      return false 
     } 
     return newDate > date 
    } 
} 

지금 당신은 내가 스택 오버 플로우 제안을 사용하여 내 문제를 해결

let leave_dates = ["03-09-2017", "04-09-2017", "05-09-2017", "04-09-2017", "01-09-2017", "07-09-2017", "09-09-2017", "10-09-2017", "12-09-2017", "13-09-2017", "15-09-2017", "16-09-2017", "23-09-2017"] 
    let today = Date() 
    let greaterThanToday = leave_dates.filter { (date) -> Bool in 
     return CustomDateFormatter.campare(date, with: today) 
    } 
    print(greaterThanToday)