我收到错误
“2013-03-06”的未定义方法“strftime”:字符串
尝试使用 strftime 从字符串 2013-03-06 正常显示日期(2013 年 6 月 3 日或类似的日期)时。
在我的 index.html.erb 中执行此操作的行如下所示
<td><%= task.duedate.strftime("%B %e, %Y") %></td>
我只是在学习 Rails,所以我确信这只是一个愚蠢的初学者错误,任何帮助将不胜感激。谢谢
我收到错误
“2013-03-06”的未定义方法“strftime”:字符串
尝试使用 strftime 从字符串 2013-03-06 正常显示日期(2013 年 6 月 3 日或类似的日期)时。
在我的 index.html.erb 中执行此操作的行如下所示
<td><%= task.duedate.strftime("%B %e, %Y") %></td>
我只是在学习 Rails,所以我确信这只是一个愚蠢的初学者错误,任何帮助将不胜感激。谢谢
当 strftime 是 Time/Date 类的方法时,看起来您的到期日期是一个字符串。你可以试试这个:
Date.parse(task.duedate).strftime("%B %e, %Y")
这为我解决了这个问题:
Date.created_at.try(:strftime, ("%B %e, %Y"))
希望这可以帮助!
您将日期时间存储为字符串,而不是实际的日期时间。您将需要创建一个新的迁移,如下所示
change_table :tasks do |t|
t.change :duedate, :datetime
end
这样,当您访问 duedate 时,它已经被解析为 datetime 对象,而不必每次都转换它。
您也可以使用 strptime。它对我有用:)
DateTime.strptime(task.duedate ,"%B %e, %Y")
我也遇到了这个问题,在 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