Получить нулевое значение при расчете быстрых временных интервалов
Я следую решению в посте, как получить 30-минутный массив временных интервалов между двумя датами, но я получаю нулевое значение на 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
is 2000-01-01 09:00:00 UTC, но я ожидал, что это будет 10:00.
Я до сих пор не освоил форматирование даты, и я не понимаю, почему я получаю ноль date2
и неправильно date1
, Любое объяснение, которое укажет мне правильное направление, будет очень полезным, как обычно. Большое спасибо
1 ответ
Я обнаружил, что проблема была в декларации формата 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)
}