Ruby DateTime格式:无法获得1st,5th等

时间:2016-08-05 14:44:50

标签: ruby activesupport

如何获得红宝石日期格式以获得th,st,rd等?例如今天是8月5日。我知道之前已经问过这个问题,我已经按照这些答案提供的解决方案,但它们似乎对我没有用。

我尝试了以下三种方式:

time = DateTime.now
time.strftime("%A, %B #{time.day.ordinalize} %Y")

=> 2016-08-05T10:29:52-04:00

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

=> 2016-08-05 10:29:52 -0400

time = Time.new
day = time.strftime("%d")
day.ordinalize

=>  NoMethodError:
   undefined method `ordinalize' for "05":String

我在spec_helper.rb文件中包含以下内容:

require 'active_support/core_ext/integer/inflections'

我使用的是ruby 2.3.0p0,活动支持gem是版本4.2.6。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

我在rails控制台中测试了你的代码,对我而言,它正在工作。

另一种方法是使用ActiveSupport :: Inflector或to_formatted_s中的ordinalize方法(这两个方法也出现在这篇文章https://stackoverflow.com/a/14665335/4340756中):

:018 > time = Time.now() => 2016-08-05 17:57:26 +0300 :019 > ActiveSupport::Inflector.ordinalize(time.day) => "5th" :022 > time.to_formatted_s(:long_ordinal) => "August 5th, 2016 17:59"

你在哪里测试过这段代码以及你有哪些版本的rails?