为了账号安全,请及时绑定邮箱和手机立即绑定

在Ruby on Rails中,如何格式化带有“ th”后缀的日期,例如“ Sun Oct 5th”

/ 猿问

在Ruby on Rails中,如何格式化带有“ th”后缀的日期,例如“ Sun Oct 5th”

浮云间 2019-11-11 15:09:25

我想以以下格式显示日期:周的短日,短的月,月中的日期,且不带前导零,但包括“ th”,“ st”,“ nd”或“ rd”后缀。


例如,询问该问题的日期将显示“ 10月2日星期四”。


我正在使用Ruby 1.8.7,而Time.strftime似乎没有这样做。我希望有一个标准库。


查看完整描述

3 回答

?
素胚勾勒不出你

使用'active_support'中的ordinalize方法。


>> time = Time.new

=> Fri Oct 03 01:24:48 +0100 2008

>> time.strftime("%a %b #{time.day.ordinalize}")

=> "Fri Oct 3rd"

注意,如果您将IRB与Ruby 2.0一起使用,则必须首先运行:


require 'active_support/core_ext/integer/inflections'


查看完整回答
反对 回复 2019-11-11
?
守候你守候我

您可以对数字使用active_support的序数化帮助器方法。


>> 3.ordinalize

=> "3rd"

>> 2.ordinalize

=> "2nd"

>> 1.ordinalize

=> "1st"


查看完整回答
反对 回复 2019-11-11
?
慕森卡

将Patrick McKenzie的答案再进一步一点,您可以在config/initializers目录中创建一个名为date_format.rb(或任何您想要的文件)的新文件,并将其放入其中:


Time::DATE_FORMATS.merge!(

  my_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }

)

然后,在您的视图代码中,只需分配新的日期格式,就可以格式化任何日期:


My Date: <%= h some_date.to_s(:my_date) %>

它简单,有效且易于构建。只需在date_format.rb文件中为每种不同的日期格式添加更多格式行。这是一个更加充实的示例。


Time::DATE_FORMATS.merge!(

   datetime_military: '%Y-%m-%d %H:%M',

   datetime:          '%Y-%m-%d %I:%M%P',

   time:              '%I:%M%P',

   time_military:     '%H:%M%P',

   datetime_short:    '%m/%d %I:%M',

   due_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }

)


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 62 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信