Ruby / Rails – 将日期/时间转换回自然语言(2011-02-17 => 2011年2月17日)

我知道Chronic是一种将语言转换为数据库计算格式的自然语言解析器,但我想知道如何将这些数据转换回人类可以轻易理解的内容。

例如:

Chronic.parse('today') => 2011-02-17 17:30:00 -0500 

那么有没有办法采取“2011-02-18 20:00:00”并将其表示为“2011年2月18日星期五晚上10点”?

基本上与慢性相反?

看看strftime,这是它为Time类实现的链接。

有了它你应该能够得到你想做的任何事情的日期:-)

 >> Time.now.strftime("%A, %B %d, %Y at %l%p") => "Thursday, February 17, 2011 at 5PM" 

http://api.rubyonrails.org/classes/DateTime.html#method-i-to_formatted_s

如果您想要执行当前日期和时间,请执行以下操作:

 Time.current.to_formatted_s(:long_ordinal) 

要得到:

 February 17th, 2011 12:16 

如果您想编写自己的格式,api会显示如何在该链接中执行此操作。 以下是可用格式的列表:

 %a weekday name. %A weekday name (full). %b month name. %B month name (full). %c date and time (locale) %d day of month [01,31]. %H hour [00,23]. %I hour [01,12]. %j day of year [001,366]. %m month [01,12]. %M minute [00,59]. %p AM or PM %S Second [00,61] %U week of year (Sunday)[00,53]. w weekday [0(Sunday),6]. W week of year (Monday)[00,53]. x date (locale). %X time (locale). %y year [00,99]. %Y year [2000]. %Z timezone name. 

我推荐to_formatted_s超过strftime的唯一原因是因为有一个好的config / initializers / time_formats.rb,你可以保持你的视图DRYer。

我很惊讶没有“逆转慢性”gem,所以我写了一篇。 它将适用于您的ActiveRecord对象。

只需gem安装并在您的created_at字段或任何其他具有ActiveSupport :: TimeWithZone类的字段上调用’pretty’方法。

https://github.com/brettshollenberger/hublot