Ruby on Rails - 如何以我需要的格式显示日期?从YYYY-MM-DD HH:MM:SS UTC转换为MM/DD/YYYY

18 ruby formatting ruby-on-rails

我是一个RoR新手.我尝试了很多东西,最后来到了以下:

<td>
 <%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%>
</td>
Run Code Online (Sandbox Code Playgroud)

但这也给了我一个错误:

$_ value need to be String (nil given)
Run Code Online (Sandbox Code Playgroud)

但我知道request.baseline_start_date给了我价值(尝试单独打印).我不知道它给的是哪一个.

关于如何实现格式转换的任何建议?

And*_*rew 32

在Rails中,您可以使用to_time字符串上的函数将其转换为Date对象:

'2012-11-14 14:27:46'.to_time.strftime('%B %e at %l:%M %p')

#=> "November 14 at 2:27 PM"
Run Code Online (Sandbox Code Playgroud)

有关便捷的交互式参考指南,请参阅http://www.foragoodstrftime.com/


Bob*_*man 27

Date.strptime(
  "2009-04-24 18:33:41 UTC",
  "%Y-%m-%d %H:%M:%S %Z"
).strftime("%m/%d/%Y")
# => "04/24/2009"
Run Code Online (Sandbox Code Playgroud)

我想也许你只是把你的格式字符串弄错了.


phi*_*530 14

查看活动支持文档和示例:http: //apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s

例子

datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0)   # => Tue, 04 Dec 2007 00:00:00 +0000

datetime.to_formatted_s(:db)            # => "2007-12-04 00:00:00"
datetime.to_s(:db)                      # => "2007-12-04 00:00:00"
datetime.to_s(:number)                  # => "20071204000000"
datetime.to_formatted_s(:short)         # => "04 Dec 00:00"
datetime.to_formatted_s(:long)          # => "December 04, 2007 00:00"
datetime.to_formatted_s(:long_ordinal)  # => "December 4th, 2007 00:00"
datetime.to_formatted_s(:rfc822)        # => "Tue, 04 Dec 2007 00:00:00 +0000"
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的想要自定义它,请定义帮助器,如:

def custom_format(time)
  Time::DATE_FORMATS[:w3cdtf] = lambda { |time| time.strftime("%Y-%m-%dT%H:%M:%S# {time.formatted_offset}") }
end
Run Code Online (Sandbox Code Playgroud)


Cha*_*ert 1

我所做的是在 config/initializer 中添加一个名为 conversions.rb 的初始值设定项,然后添加如下行:

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:<name> => '<formatting>')
Run Code Online (Sandbox Code Playgroud)

从那里开始,您可以使用您的格式呈现日期时间:

dateVar.to_s(:<name>)
Run Code Online (Sandbox Code Playgroud)

这里有一个方便的格式化标记列表