Добавление даты к дате выбора времени и времени приводит к одной и той же дате и времени. СВИФТ - PullRequest
0 голосов
/ 14 января 2019

У меня есть datePicker, который я использую для выбора начальной даты и времени, и durationTextLabel, чтобы добавить минуты к этой дате и времени. Я установил duration как минимум 30, если текст не вставлен, но значение в итоговая дата и время идентичны. Вы видите, где я ошибаюсь? Большое спасибо, как обычно.

Вот функция:

func setQueryParameters() {
        let dateFormatter = DateFormatter()
        var convertedDate: String!

        dateFormatter.dateFormat = "yyyy/MM/dd/hh/mm"
        convertedDate = dateFormatter.string(from: datePicker.date)
        let calendar = Calendar.current

        let components = (calendar as NSCalendar).components([.year, .month, .day, .weekday, .hour, .minute] , from: datePicker.date)
        let year: Int = components.year!
        let month: Int = components.month!
        let day: Int = components.day!
        let weekday: Int = components.weekday!
        let hour: Int = components.hour!
        let minute: Int = components.minute!

        var duration: Double?
        duration = Double(durationTextField.text!)
        let endDate = datePicker.date.addingTimeInterval(duration!)
        let endComponents = (calendar as NSCalendar).components([.hour, .minute], from: endDate)
        let endHour: Int = endComponents.hour!
        let endMinute: Int = endComponents.minute!

        if durationTextField.text != nil {
            duration = Double(durationTextField.text!) ?? 30.00

        } else { return}

        // Opening Time Query parameter
        openingTimeQueryStart = Int("\(String(describing: weekday))"+"00"+"00")!
        openingTimeQueryEnd = Int("\(String(describing: weekday))"+"\(String(describing: hour))"+"\(String(describing: minute))")!
        print("opening query is \(openingTimeQueryEnd)")



        // Closing Time Query parameter
        closingTimeQueryStart = Int("\(String(describing: weekday))"+"\(String(endHour))"+"\(String(endMinute))")!
        closingTimeQueryEnd = Int("\(String(describing: weekday))"+"00"+"00")!


        print("closing time query is \(closingTimeQueryStart)")


        // Booking Query parameter
        let bookingQueryString = "\(String(describing: year))"+"\(String(describing: month))"+"\(String(describing: day))"+"\(String(describing: weekday))"+"\(String(describing: hour))"+"\(String(describing: minute))"+"\(String(endHour))"+"\(String(endMinute))"

        bookingQuery = Int(bookingQueryString)!// ?? openingTimeQuery  // found nil unwripping optional

    }

1 Ответ

0 голосов
/ 14 января 2019

Здесь много проблем.

  1. Вы на самом деле никогда не используете dateFormatter, кроме создания, а затем никогда не используете convertedDate. Поэтому удалите этот неиспользуемый код.
  2. Вы указали на duration должно быть в минутах, но вы рассматриваете это как секунды. Вам нужно умножить на 60, чтобы преобразовать его в минуты.
  3. Весь ваш код для вычисления таких вещей, как openingTimeQueryEnd, зависит от того, что каждое значение состоит из двух цифр, но ваш код не дает желаемых результатов.

Например, строка:

openingTimeQueryEnd = Int("\(String(describing: weekday))"+"\(String(describing: hour))"+"\(String(describing: minute))")!

следует переписать как:

openingTimeQueryEnd = Int(String(format: "%02d%02d%02d", weekday, hour, minute))!

или как:

openingTimeQueryEnd = weekday * 10000 + hour * 100 + minute

Внести аналогичные изменения в другие похожие строки.

...