Rails - 如何更改created_at时间?

时间:2012-02-27 16:36:41

标签: ruby-on-rails ruby ruby-on-rails-3

在我的控制器中我有:

@konkurrencer = Rating.new(params[:kon])
@konkurrencer.save
@konkurrencer.konkurrencer.rating_score += params[:kon][:ratings].to_i
@konkurrencer.konkurrencer.ratings += 1
@konkurrencer.created_at = Time.now.strftime("%Y-%m-%d 00:00:00")
@konkurrencer.save

当我创建一个新项目时,created_at列为:

2012-02-27 16:35:18

我希望它是:

2012-02-27 00:00:00

2 个答案:

答案 0 :(得分:19)

你的问题是strftime只格式化时间,实际上并没有改变时间。

所以当你做Time.now时,会返回时间。 Strftime只会改变它所代表的方式。

如果您想将created_at日期更改为“2012-02-27 00:00:00”,只需将其传递给@koncurrencer.created_at

@koncurrencer.created_at = "2012-02-27 00:00:00"

应该这样做。

回答你的问题:

你在做什么应该工作得很好。实际上你可以说:

@koncurrencer.created_at = Time.now  
@koncurrencer.save

这应该可以正常工作。

如果您希望始终有时间在一天的开始,您可以使用Date.today而不是Time.now,因为它始终将日期的时间组件返回为“00:00:00 “

这是你想要的:

@koncurrencer.created_at = Date.today  
@koncurrencer.save

这应该更清楚。

答案 1 :(得分:1)

如果您想将时间始终设置为" 00:00:00",您可以这样做:

t = Time.now
=> 2012-02-27 17:46:38 +0100

t2 = Time.parse("00:00:00", t)
=> 2012-02-27 00:00:00 +0100