一个Rails中一天的12小时AM/PM时间范围

20

这是一个非常简单的问题,可能已经被问过和回答过,但我找不到任何相关信息。

无论如何,我需要一个包含12小时时间范围的数组,例如上午12点至上午11点,下午12点至晚上11点。您可能已经明白了。我现在正在尝试一种荒谬地复杂的方法,涉及将AM映射到一个数组中,PM映射到另一个数组中,然后将两个数组合并在一起。肯定有更简单的方法来完成这个任务。

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

澄清:因此,我要寻找的是 12小时制钟表,带有AM和PM。如果我想要24小时制的话,我可以使用(0..24),然后就可以完成了。但12小时制从上午12点到上午11点,然后从下午12点到晚上11点。我相信有人已经做过这件事。


实际上,我不太理解 :-) 您提供的示例相隔23小时,如果第二个时间对是下一天的话。您说的“12小时制”是什么意思?另外,您说您希望看起来像“HH:00”,但这种格式与您早期的两个示例不匹配。您是只需要字符串输出吗?您是要寻找一个“区间”构造吗?还是要寻找两个类似于 Ruby 或 Rails 的时间对象,一个表示开始时间,一个表示结束时间?如果您能给出您想要看到的“输入”和“输出”的示例,将会很有帮助。 - Peter Alfvin
1
http://apidock.com/ruby/Time/strftime => 示例 => "%r - 12小时制时间 (%I:%M:%S %p)"; 在我的irb控制台中:Time.now.strftime("%r") #=> "01:37:01 PM" - MrYoshiji
@MrYoshiji 我不是在寻找当前时间,我需要一天中所有小时的数组,使用12小时制 - irosenb
如果只是这些,为什么不将其硬编码为全局或实例变量呢?这样做看起来不太干净,但速度快且高效。您打算使用数组做什么?也许您想要一个哈希表将其映射到0-23小时? - caffeinated.tech
3个回答

33

我同意 @MrYoshi 的评论,格式化日期最简单的方法是通过.strftime()函数实现,详见RubyDoc获取所有可能的选项。

例如:

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

输出: 上午/下午 HH:MM

或者字面上你所要求的:

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

输出: HH:00

正如您提到的time_select,我假设您想要以用户可选范围的形式提供时间,因此请尝试这些time_select选项(更多选项):

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

还有这个之前的问题:如何在Rails 3中使用12小时格式的时间选择表单助手?


7

2
我不明白为什么时间会写成03:PM / 15,这不是标准的时间格式,至少在美国不是。其他国家也是这样吗?我期望它应该是3 / 15 / PM,用3个下拉框来选择——就像其他正常的网站一样。我知道你不是编写Rails代码的人,但这并没有真正解决我的问题。 - Greg Blass
我敢打赌那里有一个配置文件,或者它是基于你的语言环境。我不认为它会以03:PM / 15的形式呈现给我,看起来有问题。今天我不在Rails应用程序中,否则我会检查一下,抱歉@GregBlass。 - Will
这个问题(编辑于2013年8月1日)字面上说:“我知道Rails time_select,但我需要不同于它提供的格式。”所以虽然有趣,但你的回答并不是寻求的答案。 - Simon B.

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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接