strftime(小时)显示错误的时间吗?

时间:2010-04-07 17:12:44

标签: ruby-on-rails ruby

我正在使用此行来获取该月第一天的开始时间。

t = Time.now.to_date.beginning_of_month.beginning_of_day

当我使用t.strftime("%A %b %e @ %l:%m %p")

显示时

它显示:

Monday Feb 1 @ 12:02 AM   

小时总是12(而不是00),更精细的分钟更改以匹配整数的月份。对于二月份的日期,它会显示12:02 AM 我在变量上使用.prior_month.next_month来及时向前或向后移动。 所以当我搬到六月时,这将显示为

Tuesday June 1 @ 12:06 AM

但是当我只使用直的t显示t.to_s的值时,我得到00:00:00的这个时间,这是我所期望的:

Mon Feb 01 00:00:00 -0700 2010 

使用end_of_day会发生类似的错误,但小时始终是晚上11点 分钟是与整数月份匹配的相同整数值,即 时间是六月的晚上11:06,二月的晚上11:02。

新奇? 不可否认的是Rails的菜鸟。

感谢您提出任何意见或解释。

3 个答案:

答案 0 :(得分:2)

%m是一年中的一个月。您需要%M,如t.strftime("%A %b %e @ %l:%M %p")

end_of_day问题是有道理的,因为一天的结束时间是11:59。

答案 1 :(得分:0)

如果我们在这里谈论PHP日期格式化语法,%I指的是12小时格式的小时的两位数表示,即01到12.如果你想要24小时的时间,请使用而是%H

%m是几个月,而%M是几分钟。

请参阅PHP文档here

修改

我是愚蠢的,并且因为函数的名称而认为你在谈论PHP。幸运的是,Ruby的语法看起来基本相同,正如你从j。的回答中看到的那样。

答案 2 :(得分:0)

我相信这就是你想要的:

t = Time.now.to_date.beginning_of_month.beginning_of_day
t.strftime("%A %b %e @ %H:%M %p")

您可以找到有关time格式here的更多信息。