轨.如何存储时间(按计划)?

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)

任何使这更好的提示将不胜感激=)

  • 这不是在时间调整天休息吗?例如,如果您在凌晨2点,凌晨4点达到夏令时,则仅经过了3个小时。 (2认同)

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有类似的东西


RKe*_*ley 9

查看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'宝石代替.它就像一个魅力.


Eug*_*ene 0

我假设您为此使用某种数据库。如果您使用 MySQL 或 Postgresql,则可以使用列类型,Ruby/Rails在读取/写入数据库时datetime​​会自动将其转换为对象或从对象转换。Time我不确定 sqlite 是否有类似的东西,但我想它可能有。