19

这是一个非常简单的问题,之前可能有人问过并回答过,但我一直找不到任何东西。

无论如何,我需要一个 12 小时的范围/数组,比如 12AM - 11AM,12PM - 11PM。你可能明白了它的要点。现在我正在尝试做一个荒谬的复杂方法,包括将 AM 映射到一个阵列,PM 映射到另一个阵列,然后将两个阵列连接在一起。必须有一种更简单的方法来做到这一点。

我知道 Rails time_select,但我需要与它提供的格式不同的格式。有什么建议么?

澄清:所以我正在寻找的是12 小时制,带有上午和下午。如果我想要一个 24 小时制的时钟,我可以做到(0..24),然后就完成了。但是 12 小时制是从上午 12 点到 11 点,然后从下午 12 点到晚上 11 点。我很确定以前有人这样做过。

4

3 回答 3

30

我同意@MrYoshi 的评论,格式化日期的最简单方法是.strftime(),请参阅RubyDoc了解所有可能的选项

例子:

Time.now.strftime("%I:%M %p")

输出:HH:MM AM

或者你真正要求的:

Time.now.strftime("%I:00")

输出:HH:00

正如您所提到time_select的,我假设您想提供时间作为用户可选择的范围,因此请尝试以下选项time_select更多选项):

time_select 'game', 'game_time', {:minute_step => 60, :ampm => true}

还有上一个问题:Rails 3 的 Time select form helper with 12 hours format?

于 2013-08-01T18:18:10.293 回答
6

Rails 是内置的

   <%= f.time_select :start,  {ampm: true} %>  

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_select

于 2013-09-27T00:00:45.717 回答
6

我知道这已经在不久前用内置函数回答了。但我需要一个自定义函数来获取这些值并写了这个:

times = {"12 AM" => 0}.merge!(1.upto(11).collect { |n| {"#{n} AM" => n} }.reduce(Hash.new, :merge)).merge!({"12 PM" => 12}).merge!(1.upto(11).collect { |n| {"#{n} PM" => n + 12} }.reduce(Hash.new, :merge))

这产生:

{"12 AM"=>0, "1 AM"=>1, "2 AM"=>2, "3 AM"=>3, "4 AM"=>4, "5 AM"=>5, "6 AM"=>6, "7 AM"=>7, "8 AM"=>8, "9 AM"=>9, "10 AM"=>10, "11 AM"=>11, "12 PM"=>12, "1 PM"=>13, "2 PM"=>14, "3 PM"=>15, "4 PM"=>16, "5 PM"=>17, "6 PM"=>18, "7 PM"=>19, "8 PM"=>20, "9 PM"=>21, "10 PM"=>22, "11 PM"=>23}
于 2015-09-08T20:43:59.037 回答