如何安排猫鼬某个地方的营业时间?
Posted
技术标签:
【中文标题】如何安排猫鼬某个地方的营业时间?【英文标题】:How can I structure the opening hours of some place in Mongoose? 【发布时间】:2019-11-16 11:01:33 【问题描述】:我需要为我的数据库设计一种方法,以便能够存储一个地方的不同营业时间,比如酒吧或餐厅。这些开放时间可能每天都不同,它们需要使用 9:30 或 8:15 等时间,而不仅仅是整数。
这是我想出的:
opening_hours:
normal_days:
mon:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
tue:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
wed:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
thu:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
fri:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
sat:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
sun:
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
,
,
special_days:
date: Date,
name: String,
start: type: Number, min: 0, max: 23 ,
end: type: Number, min: 0, max: 23 ,
is_closed: Boolean,
,
,
很遗憾,我找不到更好的方法。您认为该问题的最佳模式是什么?
【问题讨论】:
【参考方案1】:我曾经遇到过同样的问题,我是这样实现的:
opening_hours: [
day: type Date, //mon - sun
periods: [
start: type Date,
end: type Date
]
]
periods
是一个数组的原因是你可以有这样的
[
start: 9h00,
end: 11h00
,
start: 13h00,
end: 18h00
]
希望这是有道理的......
【讨论】:
嗨,我正在尝试实现这一点,但不确定如何输入周一至周日的日期【参考方案2】:opening_hours:
normal_days:
monday:
start: type: Date, default: new Date().setHours(8, 0, 0, 0) ,
end: type: Date, default: new Date().setHours(4, 30, 0, 0) ,
,
tuesday:
start: type: Date, ,
end: type: Date, ,
,
当您查询数据库时,您可以分别获取小时或分钟分量。日期对象存储日期、时间和时区。大多数编程语言都具有从 Date 对象解析小时、分钟和时区的功能。 MongoDB 有 $hour、$minute 和 $dayOfWeek 等运算符。
MongoDB Date Operators
javascript Get Date Methods
【讨论】:
【参考方案3】:我认为这并没有太多问题(除了它不包括 23:00-24:00),也就是说:
如果我正在设计这个,我不会使用属性名称的缩写。例如,我使用完整的“星期四”,然后在对象本身中使用 shorthand : 'THU'
之类的内容。我也会避免在任何地方使用 0-23 小时。大概是这样的
...
shorthand: "THU"
startHours: 0-23,
endHours: 0-23,
startMinutes: 0-59,
endMinutes: 0-59,
startInMilliseconds: 0 - 24 * 60 * 60 * 1000 - 1,
endInMilliseconds: 0 - 24 * 60 * 60 * 1000 - 1
这将允许您跨时区和类似的东西工作,因为您可以轻松地操纵 unix 纪元时间。将你的时间分成小时和分钟可以让你到达 23:59,加上格式只是 $thursday.startHours:$thursday.startMinutes
而不是一些奇怪的数学从 23.75 -> 23:45 转换。
当然,这一切都取决于您的数据的实际用例。
【讨论】:
存储 unix 纪元时间是个好主意。我还考虑将营业时间存储为一个由 4 位数字组成的字符串(由正则表达式或类似的东西验证),因此我们将拥有start: 0800, end: 1900
例如,然后使用 moment.js 对其进行操作。这也行吗?
@Anthony timeAsString 实际上也不错。我正在考虑出于显示目的,但每次更新开始和结束时间时,您可能不得不跳过一些环节。但我想你有一个 updateTime() 函数,它需要几小时和几分钟才能为你做所有的魔法,所以我想这没什么大不了的。在这种情况下,肯定会节省一些时间来存储为字符串以供显示。不确定我是否喜欢在 moment.js 中使用它进行实际时间操作的音频,我宁愿用数字保持数学,并用字符串显示。以上是关于如何安排猫鼬某个地方的营业时间?的主要内容,如果未能解决你的问题,请参考以下文章