Неправильное отображение времени

ios

#1

Добрый день! Я знаю, что этот код на Objective-C и я пишу на форум swift, но все же, присутствует баг с временем, есть некий datepicker, допустимое время которое можно выбрать должно быть с 9 утра до 3 ночи следующего дня, сейчас условие работает не правильно, если я выберу дату сегодня в 21, то выдаст ошибку о том, что заведение работает с 9 утра до 3 ночи, можете помочь пофиксить условие?

- (BOOL)isWorkingYesterday:(NSDate *)date {
    if (date.timeIntervalSince1970 == 0.0) {
        date = [NSDate date];
    }
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSCalendarUnit units = (NSCalendarUnitHour | NSCalendarUnitMinute);
    NSDateFormatter *formatter = [NSDateFormatter defaultTimeFormatter];

    NSDate *yesterday = [NSDate yesterdayDateForDate:date];
    
    NSString *yesterdayStartString = [self startForDate:yesterday];
    NSString *yesterdaEndString = [self endForDate:yesterday];
    NSString *startDayString = @"00:00";
    NSString *orderDateString = [formatter stringFromDate:date];
    
    NSDate *yesterdayStart = [formatter dateFromString:yesterdayStartString];
    NSDate *yesterdayEnd = [formatter dateFromString:yesterdaEndString];
    NSDate *startDay = [formatter dateFromString:startDayString];
    NSDate *orderDate = [formatter dateFromString:orderDateString];
    
    BOOL isInYesterdayRange = (orderDate.timeIntervalSince1970 >= startDay.timeIntervalSince1970
                               && orderDate.timeIntervalSince1970 < yesterdayEnd.timeIntervalSince1970);
    
    if (yesterdayStart.timeIntervalSince1970 >= yesterdayEnd.timeIntervalSince1970 && isInYesterdayRange) {
        return YES;
    }
    
    return NO;
    
}

Вызывается так

if (![order.restaurant isWorkingYesterday:order.deliveryDate]) {
            NSString *start = [order.restaurant startForDate:order.deliveryDate];
            NSString *finish = [order.restaurant endForDate:order.deliveryDate];
            // вывод ошибки с временем, о том, что заведение работает с 9 до 3 ночи 
            message = RESTAURANT_IN_NON_WORKING_HOURS(start, finish);
        }

#2

Если вы проверяете на симуляторе, то там другие часовые пояса (+0). Проверяйте на реальных утсройствах, либо создавайте схемы для запуска симулятора в соответсвии с нужными часовыми поясами!