10

我收到错误

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

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

在我的 index.html.erb 中执行此操作的行如下所示

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

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

4

5 回答 5

39

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

Date.parse(task.duedate).strftime("%B %e, %Y")
于 2013-03-31T23:16:35.970 回答
2

这为我解决了这个问题:

Date.created_at.try(:strftime, ("%B %e, %Y"))

希望这可以帮助!

于 2017-04-29T01:48:54.720 回答
0

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

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

这样,当您访问 duedate 时,它​​已经被解析为 datetime 对象,而不必每次都转换它。

于 2013-03-31T23:12:37.077 回答
0

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

DateTime.strptime(task.duedate ,"%B %e, %Y") 
于 2016-07-12T10:07:13.877 回答
0

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

  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 
于 2021-05-15T19:26:02.997 回答