在Ruby中格式化日期/时间

8 浏览
0 Comments

在Ruby中格式化日期/时间

我收到的日期和时间格式如下:2013-04-19 11:07:37 +0530。我想知道如何在Ruby中以XYZ小时前的方式显示它。谢谢。

更新:我尝试了time_ago_in_words,但是它给我报错undefined method 'time_ago_in_words'

0
0 Comments

问题:在IRB中使用time_ago_in_words函数时出现了undefined method 'time_ago_in_words'错误。

解决方法:在使用time_ago_in_words函数之前,需要包含ActionView::Helpers::DateHelper模块。

具体代码如下:

irb> time = "2013-04-19 11:07:37 +0530"
=> "2013-04-19 11:07:37 +0530"
irb> include ActionView::Helpers::DateHelper
=> Object
irb> time_ago_in_words(time)
=> "about 3 hours"

希望这个解决方法对你有用。

0
0 Comments

问题的出现原因是在Ruby中没有内置的方法来格式化日期和时间。在Rails中有两个方法time_ago_in_words和distance_of_time_in_words来处理这个问题,但是在普通的Ruby环境下这些方法是不可用的。解决方法是自己定义一个方法来实现这个功能,可以参考Rails中的代码来编写自己的方法。

下面是一个例子,展示如何定义一个方法来格式化日期和时间:

require 'date'
def format_date_time(datetime)
  now = DateTime.now
  difference = now - datetime
  if difference < 1
    "just now"
  elsif difference < 60
    "#{difference.to_i} seconds ago"
  elsif difference < 3600
    "#{(difference / 60).to_i} minutes ago"
  elsif difference < 86400
    "#{(difference / 3600).to_i} hours ago"
  else
    datetime.strftime("%Y-%m-%d %H:%M:%S")
  end
end
puts format_date_time(DateTime.parse("2022-01-01T12:00:00+00:00"))

这个方法接受一个DateTime对象作为参数,并根据当前时间和传入的时间计算出时间差。然后根据时间差的大小来返回不同的格式化结果。如果时间差小于1秒,则返回"just now";如果时间差小于60秒,则返回几秒钟前;如果时间差小于3600秒(1小时),则返回几分钟前;如果时间差小于86400秒(1天),则返回几小时前;否则返回完整的日期和时间。

在上面的例子中,我们使用了DateTime类来表示日期和时间。你可以根据自己的需求来选择使用其他的日期和时间类库。

这个方法是一个简单的示例,你可以根据自己的需求进行修改和扩展。希望这个方法能帮助你解决格式化日期和时间的问题。

0
0 Comments

问题的出现原因是在rails控制台中尝试格式化日期/时间时出现了错误。解决方法是使用rails console来执行以下代码:

include ActionView::Helpers::DateHelper
t = Time.parse("2013-04-19 11:07:37 +0530")
time_ago_in_words(t)

然而,尝试在控制台中执行时出现了语法错误。错误信息显示在执行`Time.parse(2013-04-19 11:07:37 +0530)`时,出现了语法错误。

从错误信息中可以看出,应该将日期/时间字符串用引号括起来,以避免解析错误。因此,正确的代码应该是:

include ActionView::Helpers::DateHelper
t = Time.parse("2013-04-19 11:07:37 +0530")
time_ago_in_words(t)

这样,就可以成功在rails控制台中格式化日期/时间了。

0