【问题标题】:Ruby DateTime format: Unable to get 1st, 5th etcRuby DateTime 格式:无法获得第 1、第 5 等
【发布时间】:2016-08-05 14:44:50
【问题描述】:

如何获得具有 th、st、rd 等的 ruby​​ 日期格式?例如今天是 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 版本。

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

【问题讨论】:

  • 你可以试试下面的命令吗? gem install activesupport 然后 irb 然后 irb> require 'rubygems' #=> 真 irb> require 'activesupport' #=> 真 irb> 3.ordinalize #=> "3rd"

标签: ruby activesupport


【解决方案1】:

我在 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?

【讨论】:

  • 嗨 Ovidiu,我实际上并没有使用 rails,而是使用 rspec/capybara 作为集成测试工具。 ordinalize 方法是 rails 方法吗?我以为是红宝石方法。
  • 我推测你正在使用 rails 因为ordinalize 方法来自 ActiveSupport::Inflector。 ActiveSupport 它是一个 ruby​​ gem,但它默认包含在 Rails [rubygems.org/gems/activesupport/versions/5.0.0].您是否尝试过@Tall Paul 对最初问题的评论?
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多