我在这里使用 golang 保存日期范围。假设我们必须保存从 1-may-2018
到 14-july-2018
范围内的所有星期一。
我们如何使用 golang 找到这些范围之间的所有星期一,另一方面我们设置了 start_time
(8:00 A.M.
) 和数据库中前两个星期一的 end_time
(6:00 P.M.
),但在第三个星期一,我们的时间表发生了变化,有一个时间变化,如 start_time
(9:00 A.M.
)和 end_time
(5:00 P.M.
)。那么我将如何在实际使用 golang 时使我的数据库成为这种情况。
任何人都可以帮我解决这个问题吗?我为它创建了一个数据库,并对其进行了 ppr 工作,并创建了如下所示的一些字段:-
Fields for Schedule //Schedule is a collection name
Id (int)
Day (string)
Start_hours (int)
Start_minutes (int)
End_hours (int)
End_minutes (int)
Start_date (timestamp)
End_date (timestamp)
我将如何在所选范围内选择星期一,以及我将如何处理我上面解释的情况,任何人都可以指导我使这种情况变得更容易。谢谢,如果这是一个基本问题,那么我真的很抱歉。
最佳答案
我会做这样的事情。
- 从日期范围中查找第一个星期一日期(参见示例 How do I get the first Monday of a given month in Go?
- 每周都是星期一,因此您可以通过在结束日期前加上 7 天轻松找到其余日期
- 存储您找到的所有星期一日期以及开始时间和结束时间
我不会为小时和分钟而烦恼,因为您可以轻松地从 Go 中的时间戳中获取它们。这是我要制作的简化数据库结构
Fields for Schedule //Schedule is a collection name
Id (int)
Day (string)
Date (timestamp) // the actual date
Start (timestamp)
End (timestamp)
您不再需要任何字段。您也可以从日期字段中获取星期几(结构中的日期(字符串),例如星期一),但我相信如果您想按不同日期查询集合,这可能会加快速度,但要小心您需要调整时区。如果您使用多个时区,那么将所有内容都存储在 UTC 中,并且您可能有一个额外的时区归档,因为一个时区的日期可能是星期一,另一个时区的日期可能是星期日。
因此,日程安排将保留工作日以及每个工作日的开始和结束时间。我不确定您是否需要存储初始日期范围,Schedule 集合也将保留该范围,从第一条记录到最后一条记录。在我看来,我最初会用给定的日期范围填充集合,然后,我可以通过添加新的日期或删除它们来修改它。 当您使用 Date 字段的一些开始和结束日期范围查询此集合时,如果您的第一个结果比开始时晚 7 天,这意味着您从开始就错过了 1 个或多个条目。如果最后一个结果距离范围结束超过 7 天,这意味着您在范围结束之前错过了一些条目。
Go 没有什么特别之处,在我看来,Go 可以很好地处理日期,并且您的数据库中不需要任何特殊的日期结构。
关于mongodb - 如何在 mongodb 中创建数据库结构以保存日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50328188/