2012-02-27 4 views
4

В моем контроллере у меня есть:Rails - Как изменить время created_at?

@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 

ответ

16

Вашей проблемы что 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 

Это должно быть более понятным.

+0

Как сделать динамический? Как Time.now –

+0

Вы хотите, чтобы дата была динамичной, но время всегда было «00:00:00»? – TheDelChop

+0

Да, часы и секунды должны быть только 00:00:00 –

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 
Смежные вопросы