我需要存储营业时间并进行比较以查看我应该更新的时间(星期几)并确定它们当前是打开还是关闭。
现在问题在于,对于我的一些场地,时间可能是晚上8点到凌晨2点,这意味着我不能自动认为Carbon::now()
会告诉我他们是第二天关闭,因为它会在它运行当天凌晨2点(当前它的前一天)看到它,所以它会告诉我它们已关闭。
我无法在所有关闭时间中添加一天,因为有些时间会在晚上10点,晚上11点或者凌晨12:00之前结束,这会再次给我错误的比较
将这些时间存储在数据库中的最佳方法是什么,以便我可以轻松比较地点是否开放?
这是你需要知道的任何事情
barDays
- 表I将这些存储在
我使用Laravel,因此对数据库的所有查询都在Laravel中,但barDays
的字段如下:
'day_id', 'bar_id', 'type', 'musicType', 'hours'
小时以X:XX AM/PM - X:XX AM/PM
的格式存储,其中X是0-9的整数,这是我知道存储它们最干净的,我不能使用TimeStamps,因为这些是每周价值并且不太可能改变。
我使用Carbon作为我的查询,因为它内置于Laravel
感谢任何帮助人员,过去6天我一直在努力解决这个问题,而且我正处于一个严重的驼峰
答案 0 :(得分:0)
我几年前建造的东西略有相似之处。 我的方法是将开放时间从会场桌上分开,因为他们大多数每天有2或3个单独的开放/关闭时间,即:
在DB上它类似于:
Bars
id | name | type
1 | Bar1 | A
2 | Bar2 | B
bar_days
id | bar_id | day_id | music_type | start | end
1 | 1 | 1 | Z | 9.00 PM | 10.00 PM
2 | 1 | 1 | Q | 2.00 PM | 11.00 PM
3 | 2 | 1 | X | 8.00 PM | 9.00 PM
4 | 2 | 1 | Y | 9.00 PM | 10.00 PM
5 | 2 | 1 | Z | 10.00 PM | 11.59 AM
5 | 2 | 2 | Z | 12.00 AM | 2.00 AM
如果你只需要检查一个小时来决定是否关闭,它应该已经有效了。
如果您必须检查地点是否在某个时间范围内开放,那么连接变得有点复杂但仍然可行,因为相同的music_type,day_id和bar_id不应超过2个开放时间是连续的(午夜)
要计算比较此表中日期时要添加的天数,您可以使用与此类似的内容:
<?php
$today = 2;
for ($i = 0; $i < 7; $i++){
$eventDay = ( $i+$today ) % 7;
$daysToAdd = $eventDay - $today;
$daysToAdd = $daysToAdd < 0 ? (7+$daysToAdd) : $daysToAdd;
$format = "event day %d - today %d we should add %d\n";
echo sprintf($format, $eventDay, $today, $daysToAdd);
}
希望它有所帮助!