leo*_*nel 35 ruby ruby-on-rails
我正在编写一个跟踪学校课程的应用程序.
我需要存储时间表.例如:周一至周五上午8点至上午11点.
我正在考虑使用一个简单的字符串列,但我将需要稍后进行时间计算.
例如,我需要存储8am的表示,例如start_at:8am end_at:11am
那我该如何存储时间呢?我应该使用什么数据类型?我应该存储开始时间和秒数或分钟数,然后从那里计算?或者有更简单的方法吗?
我使用MySQL进行生产,使用SQLite进行开发.
cho*_*bin 19
我最近制作了一个必须解决这个问题的应用程序.我决定在一个简单的营业时间模型中从午夜开始存储open_at和closed_at.ActiveSupport包含这个方便的帮助程序,用于查找自午夜以来的秒数时间:
Time.now.seconds_since_midnight
Run Code Online (Sandbox Code Playgroud)
这样我可以做一个简单的查询来查明场地是否开放:
BusinessHour.where("open_at > ? and close_at < ?", Time.now.seconds_since_midnight, Time.now.seconds_since_midnight)
Run Code Online (Sandbox Code Playgroud)
任何使这更好的提示将不胜感激=)
idr*_*bst 11
如果您正在使用Postgresql,则可以使用time列类型,它只是一天中的时间而不是日期.然后你可以查询
Event.where("start_time > '10:00:00' and end_time < '12:00:00'")
Run Code Online (Sandbox Code Playgroud)
也许MySQL有类似的东西
查看Rails 4的gem'tod '或Rails 3的Time_of_Day.它们都解决了在使用Active Record模型时在数据库中存储时间的问题.
SQL有时间数据类型但Ruby没有.Active Record通过在规范日期2000-01-01上使用Ruby的Time类表示时间属性来解决这种差异.所有时间属性都被任意分配相同的日期.虽然属性可以相互比较而没有问题(日期相同),但当您尝试将它们与其他Time实例进行比较时会出现错误.只需在像"10:05"这样的字符串上使用Time.parse就可以在输出中添加今天的日期.
Lailson Bandeira为这个问题创建了一个创建的解决方案,即Rails 3的Time_of_Day gem.不幸的是,不再维护gem.使用Jack Christensen的'tod'宝石代替.它就像一个魅力.
我假设您为此使用某种数据库。如果您使用 MySQL 或 Postgresql,则可以使用列类型,Ruby/Rails在读取/写入数据库时datetime会自动将其转换为对象或从对象转换。Time我不确定 sqlite 是否有类似的东西,但我想它可能有。
| 归档时间: |
|
| 查看次数: |
16366 次 |
| 最近记录: |