如何判断午夜后是否营业

时间:2019-04-15 13:37:30

标签: swift

我已经看了这个问题,但是很多问题都没有道理也没有用: How to determine if a business is open given the hours of operation (Swift-iOS)

我列表中的某些地点在上午7:30左右打开,第二天凌晨4点关闭。我在我的Parse服务器上列出了这样的时间: openTime(Number):7.5(for 7:30 am) closeTime(数字):和4(代表上午4点)

但是,当我使用链接问题中的逻辑时,

if now.hour! > Int(openTime) && now.hour! < Int(closeTime) {}

它一直在说生意关门了。我该如何调整数字或逻辑,以使其适用于第二天深夜/第二天清晨关闭的地方?

2 个答案:

答案 0 :(得分:3)

您可以认为closeTime必须优于openTime,否则要优于第二天。

因此它将变为:

let realCloseTime = closeTime < openTime ? closeTime + 24 : closeTime
if now.hour! > Int(openTime) && now.hour! < Int(realCloseTime) {}

答案 1 :(得分:1)

您将在几分钟内遇到问题。在7:30开放的商店将报告在7:00开放。在11:30关闭的商店将报告在11:00关闭。

假设打开和关闭是双打。

var openTime: Double
var closeTime: Double

然后

func isOpen(at date: Date = Date()) -> Bool {
    guard let openDate = createDate(bySettingHours: openTime, of: date) else { return false }
    guard let closeDate = createDate(bySettingHours: closeTime, of: date) else { return false }
    guard let adjustedCloseDate = add24Hours(to: closeDate) else { return false }

    let realCloseDate = openDate < closeDate ? closeDate : adjustedCloseDate

    return openDate <= date && date <= realCloseDate
}

private func createDate(bySettingHours double: Double, of date: Date) -> Date? {
    let hour = Int(floor(double)) % 24
    let minute = Int(double * 30) % 30

    return Calendar.current.date(bySettingHour: hour, minute: minute, second: 0, of: date)
}

private func add24Hours(to date: Date) -> Date? {
    return Calendar.current.date(byAdding: .hour, value: 24, to: date)
}

我以为你有像这样的模型

class Business {
    var openTime: Double
    var closeTime: Double
}

我的建议是在此处添加isOpen(at:)方法。

class Business {
    var openTime: Double
    var closeTime: Double

    func isOpen(at date: Date = Date()) -> Bool {
        // implmentation
    } 
}

将使用类似这样的方式

var business = Business()

// Setup `business`

business.isOpen()

// or

let now = Date()
business.isOpen(at: now)