在ruby中设置DateTime的时间部分



假设我有一个日期时间对象,例如DateTime.now。我想将小时和分钟设置为0(午夜)。我该怎么做?

在Rails环境中:

感谢ActiveSupport,您可以使用:

DateTime.now.midnight
DateTime.now.beginning_of_day

DateTime.now.change({ hour: 0, min: 0, sec: 0 })
# More concisely
DateTime.now.change({ hour: 0 })                

在纯Ruby环境中:

now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)

now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))

Nevermind,得到了。需要创建一个新的DateTime:

DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)

警告DateTime.now.midnightDateTime.now.beginning_of_day返回相同的值(即当天的零时-午夜不会像您从其名称中预期的那样返回24:00:00)。

因此,我将此添加为进一步的信息,以供任何可能使用已接受的答案来计算未来x天午夜的人使用。

例如,应该在第14天午夜到期的14天免费试用:

DateTime.now.midnight + 14.days

是第14天的上午,相当于一个13天的试验(x是一天中剩下的部分——如果现在是中午,那么就是13.5天的试验)。

你实际上需要这样做:

DateTime.now.midnight + 15.days

到第14天午夜。

出于这个原因,我总是更喜欢使用beginning_of_day,因为那是00:00:00。使用午夜可能会引起误解。

如果你经常使用它,可以考虑安装这个gem来改进日期解析:

https://github.com/mojombo/chronic

require 'chronic'
Chronic.parse('this 0:00')

相关内容

  • 没有找到相关文章

最新更新