как сравнить дату в swift 3.0?

У меня есть две даты, и я хочу их сравнить. Как сравнить даты? Я должен встречаться с объектами. Скажите modificateionDate старше updatedDate.

Итак, как лучше всего сравнивать даты?


person Ashwin Indianic    schedule 17.02.2017    source источник
comment
Лучшая практика получит мнения. Покажите, КАК вы сравниваете даты, и спросите, есть ли лучший способ?   -  person JohnG    schedule 17.02.2017
comment
Взгляните на это   -  person Stefan Stefanov    schedule 17.02.2017


Ответы (4)


Date теперь соответствует Comparable протокол. Таким образом, вы можете просто использовать <, > и == для сравнения двух объектов типа Date.

if modificateionDate < updatedDate {
     //modificateionDate is less than updatedDate
}
person Nirav D    schedule 17.02.2017
comment
@AshwinKanjariya Вы сказали, что вам нужно Date экземпляр, тогда это сработает, я думаю, у вас есть NSDate экземпляр, сначала подтвердите это здесь, покажите свой код. Тесто, если вы используете Date вместо NSDate в Swift 3 - person Nirav D; 17.02.2017
comment
@AshwinIndianic Добро пожаловать, приятель :) - person Nirav D; 17.02.2017
comment
@AshwinIndianic Теперь я знаю, почему вы не принимаете мой ответ, потому что вы работаете с двумя учетными записями и хотите принять ответ из этого ответа. Я проверил ваш вопрос and-instal" title="архив не выполнен из-за кода ошибки 1, хотя я могу выполнить сборку и установку"> stackoverflow.com/questions/42336935/ То, как вы работаете, не очень хорошо, скоро вы будете знаю это. - person Nirav D; 21.02.2017
comment
@AshwinIndianic Итак, теперь вы изменили имя пользователя, чтобы никто этого не заметил, хорошая попытка, продолжайте :) - person Nirav D; 21.02.2017

Согласно ответу @NiravD, Date равно Comparable. Однако, если вы хотите сравнить с заданной степенью детализации, вы можете использовать Calendar compare(_:to:toGranularity:)

Пример…

let dateRangeStart = Date()
let dateRangeEnd = Date().addingTimeInterval(1234)

// Using granularity of .minute
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .minute)

switch order {
case .orderedAscending:
    print("\(dateRangeEnd) is after \(dateRangeStart)")
case .orderedDescending:
    print("\(dateRangeEnd) is before \(dateRangeStart)")
default:
    print("\(dateRangeEnd) is the same as \(dateRangeStart)")
}

> 2017-02-17 10:35:48 +0000 is after 2017-02-17 10:15:14 +0000

// Using granularity .hour
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .hour)

> 2017-02-17 10:37:23 +0000 is the same as 2017-02-17 10:16:49 +0000
person Ashley Mills    schedule 17.02.2017
comment
Благодарю вас! Эта функция детализации — именно то, что я искал. - person derf26; 14.02.2018

Swift iOS 8 и выше Когда вам нужно больше, чем просто сравнение дат в большем или меньшем размере. Например, это тот же день или предыдущий день,...

Примечание. Никогда не забывайте о часовом поясе. Часовой пояс в календаре установлен по умолчанию, но если он вам не нравится, вы должны установить часовой пояс самостоятельно. Чтобы узнать, какой сейчас день, вам нужно знать, в каком часовом поясе вы спрашиваете.

extension Date {
    func compareTo(date: Date, toGranularity: Calendar.Component ) -> ComparisonResult  {
        var cal = Calendar.current
        cal.timeZone = TimeZone(identifier: "Europe/Paris")!
        return cal.compare(self, to: date, toGranularity: toGranularity)
        }
    }

Используйте это так:

if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}

Более сложный пример использования этого в фильтре см. здесь:

https://stackoverflow.com/a/45746206/4946476

person t1ser    schedule 17.08.2017

Swift имеет ComparisonResult с упорядоченным по возрастанию, упорядоченным по убыванию и таким же, как показано ниже.

if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
            //Do what you want
}

Надеюсь, это поможет вам.

person Kanjariya-IOS    schedule 17.02.2017
comment
Swift has ComparisonResult with orderedAscending Нет. Это из Фонда. В самом Swift их нет. - person Eric Aya; 17.02.2017
comment
Теперь я на 100% уверен, что эти оба кондиционера обрабатываются вами, @AshwinIndianic. Вы думаете, что изменили имя для обоих пользователей и выжили здесь :P :D Отлично :- - person Nirav D; 23.02.2017
comment
Спасибо, что заметили, но то, что вы считаете неправильным... Вы можете подробно рассказать об этом, я не против. - person Kanjariya-IOS; 23.02.2017
comment
@Kanjariya-IOS То, что я заметил, правильно, и это мы оба знаем: P Если вы оба разные люди, то @Ashwin Indianic должен принять мой приведенный выше ответ, потому что он принимает ваш ответ в другом вопросе. :- - person Nirav D; 23.02.2017