将ruby中的日期转换为自定义格式

时间:2013-11-27 08:55:42

标签: ruby-on-rails ruby gem

我正在寻找一种方法,我可以将日期转换为更多人类可读的格式......例如:

2013年2月12日可以转换为“2013年12月2日” 12/03/2013应转换为“2013年12月3日” 2013年11月27日可以转换为“2013年11月27日”

Ruby / Rails中的任何函数是否可以随时使用,或者除了日期数字之外我还必须自己编写处理“st”,“nd”,“rd”和“th”的内容?

4 个答案:

答案 0 :(得分:8)

你可以试试这个

t = Time.now()
t.strftime("#{t.day.ordinalize} %B %Y")

这将导致

27th November 2013

答案 1 :(得分:1)

您应该使用strftime函数(可在多个语言中使用)来格式化时间和日期。

在您的情况下,只需要很少的努力就可以获得一些非常好的结果:

Time.now.strftime("%e %b %Y") #=> "27 Nov 2013"

对于ordinalization,编写自定义函数或使用Rails'ordinalize(如前所述)。

这是来源:

def ordinalize(number)
  if (11..13).include?(number.to_i.abs % 100)
    "#{number}th"
  else
    case number.to_i.abs % 10
      when 1; "#{number}st"
      when 2; "#{number}nd"
      when 3; "#{number}rd"
      else    "#{number}th"
    end
  end
end

答案 2 :(得分:0)

使用:Time.now.strftime(“%a%B%d,%Y”)

=> "Wed November 15, 2013"

==> today = Time.now
==> today = today.strftime("%a %B #{t.day.ordinalize}, %Y")
==> "Wed November 27th, 2013"

答案 3 :(得分:0)

如果你经常这样做,那么邮票宝石非常有用 - https://github.com/jeremyw/stamp

它允许您执行以下操作:

date = Date.new(2011, 6, 9)
date.stamp("Sunday, May 1, 2000")   #=> "Thursday, June 9, 2011"
date.stamp("Sun Aug 5")             #=> "Thu Jun 9"
date.stamp("12/31/99")              #=> "06/09/11"
date.stamp("DOB: 12/31/2000")       #=> "DOB: 06/09/2011"
date.stamp("November 5th")          #=> "June 9th"
date.stamp("1st of Jan")            #=> "9th of Jun"