Проблема при сравнении двух дат в swift - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь сравнить две даты, одна идет из бэкэнда, а вторая - текущая дата. Но это не показывает мне правильный результат, как моя первая дата Jan 26, 2020 и текущая Jan 27,2020, она не должна добавлять первую дату в мой массив. Я хочу только те даты, которые указаны выше текущей даты. Мой код для сравнения такой:

for date in dateRange
{
    let availableDate = dateFormatter.string(from: date as Date)
    //self.datesArray.append(availableDate + " | \(dateTime.startTime ?? "") - \(dateTime.endTime ?? "")")
    let dates = Date()
    let formatter = DateFormatter()
    formatter.dateFormat = "EEEE, MMM d, yyyy"
    let results = formatter.string(from: dates)
    if availableDate <= results
    {
        print("Past Date")
    }
    else
    {
        print(availableDate)
        print(results)
        self.datesArray.append(availableDate)
    }
}

Для каждой итерации добавляется дата в dateArray, я не знаю почему?

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Довольно плохая идея конвертировать даты в строки и сравнивать их.

Кроме того, формат строки в любом случае несопоставим (например, Feb меньше Jan)

Сравните даты

for date in dateRange {            
   let now = Date()
   if date <= now {
       print("Past Date")
   } else {
       print(date)
       print(now)
       self.datesArray.append(date) // declare datesArray as [Date]
   }
}

или проще

let filteredDates = dateRange.filter{ $0 > Date() }
self.datesArray.append(contentsOf: filteredDates)
0 голосов
/ 27 января 2020

Чтобы проверить даты, только по дате, а не по времени, которые после сегодняшнего дня используют встроенный тип Date, а не строки, и использовать класс Calendar

let now = Date()
let calendar = Calendar.current
let datesArray = dateRange.filter { calendar.compare($0, to: now, toGranularity: .day) == .orderedDescending} 

Для лучшего результата вы должны установить timeZone свойство часового пояса входящих дат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...