我已经看了这个问题,但是很多问题都没有道理也没有用: 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) {}
它一直在说生意关门了。我该如何调整数字或逻辑,以使其适用于第二天深夜/第二天清晨关闭的地方?
答案 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)