如何使用上午/下午显示DateTime而不使用Rails中的自定义格式

时间:2014-04-07 08:31:05

标签: ruby-on-rails ruby datetime ruby-on-rails-4 ruby-on-rails-3.2

目前,我在Rails中显示我的DateTime

my_time.to_formatted_s(:long_ordinal)

产生如下日期:

March 17th, 2014 14:44

完美除了14:44时间。我希望它说下午2:44('pm'格式化对我来说无关紧要)。这对于普通人来说需要更容易阅读。我知道我可以使用:

my_time.strftime('%l:%M %p')

但是,我真的很想使用预定义的符号来表示更易读的格式,因为我希望这种格式在任何语言中都更具人性化。如果有人正在使用DateTime自然看起来有点不同的另一种语言进行浏览,我希望Rails可以,或者至少可以设置为自动显示DateTime。也许我在那里期待太多的Rails?虽然没有一个简单的标志或设置用于更人性化的DateTime格式,但对我来说似乎很奇怪。

4 个答案:

答案 0 :(得分:4)

在这种情况下,您可以添加自己的人性化格式

# config/initializers/time_formats.rb
Time::DATE_FORMATS[:custom_long_ordinal] = "%B %e, %Y %l:%M %p"

并将其与

一起使用
my_time.to_formatted_s(:custom_long_ordinal)

答案 1 :(得分:0)

请参阅ActiveSupport日期时间格式的api doc参考:http://apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s

答案 2 :(得分:0)

如果你只想要晚上10点15分

您可以使用:

t=Time.now
am=true
if t.hour >= 12
  t=t-12*60*60
  am=false
end
s=t.to_s[13..17]
if am==true
  return s+ "am"
else
  return s+ "pm"
end

或者使用SOMETHING LIKE编辑/扩展时间类(我不建议您使用此代码,它只是一个草稿)

class Time
  def self.humanize
    t=self
    am=true
    if t.hour >= 12
      t=t-12*60*60
      am=false
    end
    s=t.to_s[13..17]
    if am==true
      return s+ "am"
    else
      return s+ "pm"
    end
  end
end

答案 3 :(得分:0)

听起来你会更好地阅读Rails'i18n


我们使用config/locales/xx.yml文件格式化时间:

#config/locals/en.yml
en:
  time:
    formats:
      small: "%-dM %-dD %-dW"

这允许我们致电:

<%=l object, format: :small %>

然后,您可以使用strftimer来获得一些非常好的格式