Rails undefined方法`strftime'代表“2013-03-06”:String

时间:2013-03-31 23:05:39

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

我收到错误

未定义的方法`strftime'代表“2013-03-06”:字符串

尝试使用strftime从字符串2013-03-06正常显示日期(2013年6月3日星期日或类似事件)。

在我的index.html.erb中执行此操作的行,看起来像这样

<td><%= task.duedate.strftime("%B %e, %Y") %></td>

我只是在学习Rails,所以我确信这只是一个愚蠢的初学者错误,任何帮助都将不胜感激。谢谢

5 个答案:

答案 0 :(得分:32)

当strftime是Time / Date类的方法时,看起来你的duedate是一个字符串。你可以试试这个:

Date.parse(task.duedate).strftime("%B %e, %Y")

答案 1 :(得分:1)

这解决了我的问题:

{{1}}

希望这有帮助!

答案 2 :(得分:0)

您将日期时间存储为字符串而不是实际日期时间。您需要创建一个新的迁移,如下所示

change_table :tasks do |t|  
  t.change :duedate, :datetime 
end

这种方式当您访问duedate时,它已经被解析为datetime对象,而不是每次都必须转换它。

答案 3 :(得分:0)

你也可以使用strptime。它对我有用:)

DateTime.strptime(task.duedate ,"%B %e, %Y") 

答案 4 :(得分:0)

我也遇到了这个问题,在 controller.rb 文件中创建了一个方法将日期从字符串格式转换为 datetime 对象后,我能够解决它,然后我在将数据保存到数据库之前在 create 函数中调用了这个方法。< /p>

  def convert_to_date(date_as_string)
    #expecting date format in "yyyy-mm-dd" format
    if date_as_string.length > 0
      split_date = date_as_string.split('-')
      return Date.new(year=split_date[0].to_i, month=split_date[1].to_i, 
      day=split_date[2].to_i) 
    else
      return nil 
    end 
  end