繁体   English   中英

如何在不使用Rails的自定义格式的情况下以am / pm显示DateTimes

[英]How to display DateTimes with am/pm without using custom formatting in Rails

目前,我在Rails中使用以下命令显示DateTime

my_time.to_formatted_s(:long_ordinal)

这样产生的日期如下:

March 17th, 2014 14:44

完美,除了14:44时间。 我想说2:44 pm(“ pm”的格式对我来说无关紧要)。 对于普通人来说,这需要更容易阅读。 我知道我可以使用:

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

但是,我真的很想使用预定义的符号来实现更易于理解的格式,因为我希望这种语言在任何语言下都更具可读性。 如果有人使用另一种语言浏览,而DateTime看起来自然有些不同,那么我希望Rails可以(或至少设置为)自动很好地显示DateTime 也许我期望在那里有太多的Rails吗? 尽管似乎没有简单的标志或设置更便于人类阅读的DateTime格式,但对我来说似乎很奇怪。

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

# 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)

有关ActiveSupport DateTime格式的信息,请参阅api文档参考: http ://apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s

如果您只想晚上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

或者使用类似的方式编辑/扩展时间类别(我不建议您使用此代码,这只是草稿)

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

听起来您会更好地阅读Rails的i18n


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

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

这使我们可以调用:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM