在我的控制器中我有:
@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
答案 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