Сравнить дату со строковым значением даты Swift - PullRequest
2 голосов
/ 15 апреля 2019

Я пытаюсь преобразовать строковую дату в тип даты.Но когда я пытаюсь использовать этот код, приведенный ниже, возвращаемое значение nil после того, как я сравниваю две даты друг с другом, одна выбирается из списка выбора даты, а вторая - текущая дата, но всегда даю мой номер возврата.

IЯ действительно запутался, как преобразовать строковую дату в тип даты и после сравнения двух дат друг с другом, пожалуйста, проверьте код ниже:

Код

    let currentDate = Date()
    let currentDformatter = DateFormatter()
    currentDformatter.dateFormat = "dd-MM-yyyy"
    let currentDateResult = currentDformatter.date(from: "\(currentDate)")
    print("Current Latest Date ",currentDateResult as Any)

    let selectedDate = Date()
    let selectedDformatter = DateFormatter()
    selectedDformatter.dateFormat = "dd-MM-yyyy"
    let selectedresult = selectedDformatter.string(from: selectedDate)
    print("Current Latest Date ",selectedresult)

    if currentDateResult == selectedDate{
        print("yes")
    }else{
        print("no")
    }

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

Код:

CurrentDateAndTime 2019-04-15 05:00:00 +0000

SelectDateAndTime  2019-04-16 07:52:28 +0000

Я не хочу, чтобы пользователь выбирал время после 5 часов,как я могу проверить и сравнить время ??

как я могу проверить и сравнить время ??

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Есть лучший способ проверить, совпадают ли две даты в один и тот же день.

let currentDate = Date()
let selectedDate = Date()
if Calendar.current.isDate(currentDate, inSameDayAs: selectedDate) {
    print("yes")
} else {
    print("no")
}
1 голос
/ 15 апреля 2019
let currentDate = Date()
let currentDformatter = DateFormatter()
currentDformatter.dateFormat = "dd-MM-yyyy"
let currentDateResult = currentDformatter.date(from: "\(currentDate)")
print("Current Latest Date ",currentDateResult as Any)

В приведенном выше коде вы фактически не конвертируете объект Date в тип String. Интерполяция его в строку будет выводить только объект и его свойства. Вы должны преобразовать ваш объект даты в строку.

let myDateInString = "22-08-2018"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd-MM-yyyy"
let date = formatter.date(from: myDateInString) // Optional
let stringVal = formatter.string(from: date!)
debugPrint(stringVal)

Если вы хотите сравнить две даты, вы можете использовать:

switch date1.compare(date2) {
case .orderedSame: break // exact same
case .orderedAscending: break // date2 comes after date1 in calendar
case .orderedDescending: break // date2 comes before date1 in calendar
}

Если вы просто хотите проверить, относятся ли две даты к одному дню, используйте ответ @ vadian

0 голосов
/ 15 апреля 2019

Вы получаете currentDateResult, равное nil, потому что вы не проходите вправо date String, поэтому вам нужно преобразовать date в string, а затем передать string в это, как показано ниже:

let currentDateResult = currentDformatter.date(from: currentDformatter.string(from: currentDate))

В противном случае вы можете сделать то же самое, что и выше @vadian ответ

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