2016-04-13 31 views
0

我使用rails的stime属性(指开始时间)创建了一个数据库。它的类型是Time。当我添加了一个纪录:Rails中的时间数据类型

stime = "10:10" 

它已被添加为:

"stime":"2000-0101T10:10:00.000Z" 

我只希望时间,而不是日期。我认为这是TimeDateTime之间的差异。谁能告诉我问题是什么?

回答

3

正如文档所述,事实并非如此。

时间是日期和时间的抽象。时间在内部存储为 ,表示自世界时间1月1日 1970 00:00 UTC以来的分数秒数。

有几件事情可以做:

  • 存储作为一个字符串和正则表达式做验证。
  • 如果您使用的是Postgres,不介意依赖它,可以使用time类型。这可以让你做这样的事情:YourModel.where("stime > '13:00:00'")
  • 从午夜开始以秒为单位存储时间。这将需要你添加一些辅助方法来创建和查询数据的范围。你可能会发现ActiveSupport的extension on numeric values有帮助。
2

处理这个问题,为了举例Uzbekjon的第三点,是存储时间为秒从凌晨起,整列方式一:

stime = Time.now 
# => 2016-04-13 10:58:13 -0700 
seconds = stime.seconds_since_midnight.to_i 
# => 39493 

然后你可以检索此值,并将其解析到当需要的时候:

time = Time.at(seconds).utc 
# => 1970-01-01 10:58:13 UTC 
result = time.strftime("%I:%M") 
# => "10:58" 

希望它有帮助!