如何在 ruby 中格式化日期以包含“rd” 如“第三”中所示。
我想格式化日期对象,以便可以显示“7 月 3 日”或“10 月 1 日”等字符串。 我在 Date.strftime 中找不到生成“rd”和“st”的选项。 有人知道怎么做吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想格式化日期对象,以便可以显示“7 月 3 日”或“10 月 1 日”等字符串。 我在 Date.strftime 中找不到生成“rd”和“st”的选项。 有人知道怎么做吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
我会同意其他人的观点,但我只是鼓励您下载
activesupport
gem,这样您就可以将它用作库。 您不需要所有 Rails 都可以使用ordinalize
。I'm going to echo everyone else, but I'll just encourage you to download the
activesupport
gem, so you can just use it as a library. You don't need all of Rails to useordinalize
.我不认为 Ruby 有它,但如果你有 Rails,试试这个:-
I don't think Ruby has it, but if you have Rails, try this:-
似乎我正在第三次重新讨论这个主题,所以我用一些额外的评论/用法更新了我的要点。
https://gist.github.com/alterisian/4154152
干杯,
伊恩.
Seems I'm revisiting this topic for a third time, so I've updated my gist with some extra comments / usage.
https://gist.github.com/alterisian/4154152
Cheers,
Ian.
我不知道它是否比 switch-case 快得多(任何?),但我用结尾做了一个常量:
然后就这样使用它:
因为我想要结尾在 a 中
I don't know if it makes it that much (any?) faster than switch-case, but I made a constant with the endings:
Then just used it like:
As I wanted the ending inside a
需要“主动支持”
1.序数=> 'st'
1.排序=> “第一”
require 'activesupport'
1.ordinal => 'st'
1.ordinalize => '1st'
我使用了 String#sub (可以使用
sub!
),它采用哈希 (H
) 作为第二个参数。sub
使用的正则表达式为“匹配一个或多个数字,后跟一个逗号”。(?=,)
是一个正向前瞻。我使用 H rel="nofollow noreferrer">Hash::new 占用一个块。 这仅意味着如果
H
没有键k
,则H[k]
返回由块计算的值。 在这种情况下,哈希值是空的,因此块总是返回感兴趣的值。 该块采用两个参数,哈希值(此处为 H)和正在评估的密钥。 我用下划线表示前者,表明该块不使用它)。 一些示例:请参阅 Time#strftime 了解格式化指令。
I have used the form of String#sub (one could use
sub!
) that takes a hash (H
) as its second argument.The regular expression used by
sub
reads "match one or more digits followed by a comma".(?=,)
is a positive lookahead.I created the (empty) hash
H
using the form of Hash::new that takes a block. This simply means that ifH
does not have a keyk
,H[k]
returns the value computed by the block. In this case the hash is empty so the block always returns the value of interest. The block takes two arguments, the hash (hereH
) and the key being evaluated. I've represented the former with an underscore, signalling that it is not used by the block). Some examples:See Time#strftime for formatting directives.
除非你使用Rails,否则添加这个ordinalize方法(无耻地编码
从 Rails 源代码中提取)到 Fixnum 类
然后将日期格式设置如下:
Unless you're using Rails, add this ordinalize method (code shamelessly
lifted from the Rails source) to the Fixnum class
Then format your date like this:
将制作《2009年7月4日》
Will produce "4th of July, 2009"