получить нулевое значение при расчете быстрых временных интервалов - PullRequest
0 голосов
/ 07 февраля 2019

Я следую решению в посте , как получить массив с 30-минутными временными интервалами между двумя датами swift , но я получаю нулевое значение для date2 в моей следующей функции:

func calculateOpenTimeSlots() {

        let formatter = DateFormatter()
        formatter.dateFormat = "hh:mm"
        let weekday = self.actualWeekday
        let openingTime = openingTimeArray[weekday!].openingTime
        let closingTime = openingTimeArray[weekday!].closingTime
        let date1 = formatter.date(from: openingTime)
        let date2 = formatter.date(from: closingTime)
        var i = 1
        timeSlotArray.removeAll()
        while true {
            let date = date1?.addingTimeInterval(TimeInterval(i*30*60))
            let string = formatter.string(from: date!)
            if date! >= date2! {break}
            i = i + 1
            timeSlotArray.append(string)
        }

    }

массив:

var openingTimeArray: [(weekday: Int, openingTime: String, closingTime: String)] = [(weekday: 0, openingTime: "10:00", closingTime: "19:00"), (weekday: 1, openingTime: "10:00", closingTime: "19:00"), (weekday: 2, openingTime: "10:00", closingTime: "19:00"), (weekday: 3, openingTime: "10:00", closingTime: "19:00"), (weekday: 4, openingTime: "10:00", closingTime: "19:00"), (weekday: 5, openingTime: "10:00", closingTime: "19:00"), (weekday: 6, openingTime: "10:00", closingTime: "19:00"), (weekday: 7, openingTime: "10:00", closingTime: "19:00")]

openingTime и closingTime значения не равны нулю, и они являются правильным значением, но на date1 я получаю полную дату с часом, равным 1 часурано.date1 это 2000-01-01 09:00:00 UTC, но я ожидал, что это будет 10:00.

Я до сих пор не освоил форматирование даты и не понимаю, почему я получаю нольdate2 и неправильный date1.Любое объяснение, которое укажет мне правильное направление, будет очень полезным, как обычно.Большое спасибо

1 Ответ

0 голосов
/ 08 февраля 2019

Я обнаружил, что проблема была в объявлении формата formatter.dateFormat = "hh:mm".Я изменил его на formatter.dateFormat = "HH:mm", и теперь он работает как положено.Мне пришлось добавить добавку timeSlotArray.append(openingTime) перед циклом while, потому что цикл не добавлял первый временной интервал, начинающийся во время открытия, но я хотел бы переписать цикл, чтобы учесть это.Любое предложение о том, как этого добиться?

func calculateOpenTimeSlots() {
         timeSlotArray.removeAll()

        let formatter = DateFormatter()
//        formatter.timeZone = TimeZone(identifier: "UTC")
        formatter.dateFormat = "HH:mm"
        let weekday = self.actualWeekday
        let openingTime = openingTimeArray[weekday!].openingTime
        let closingTime = openingTimeArray[weekday!].closingTime
        let date1 = formatter.date(from: openingTime)
        timeSlotArray.append(openingTime)
        let date2 = formatter.date(from: closingTime)
        var i = 1

        while true {
            let date = date1?.addingTimeInterval(TimeInterval(i*30*60))
            let string = formatter.string(from: date!)
            if date! >= date2! {break}
            i = i + 1
            timeSlotArray.append(string)
        }
        print(timeSlotArray)

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