当前位置:  开发笔记 > 编程语言 > 正文

从Ruby中的DateTime减去n小时

如何解决《从Ruby中的DateTime减去n小时》经验,为你挑选了6个好方法。

我有一个Ruby DateTime,它从表单中填充.此外,我还有n小时的表格.我想从之前的DateTime中减去这n小时.(获得时间范围).

DateTime有两个方法" - "和"<<"来减去日期和月份,但不是小时.(API).有什么建议我怎么做?



1> Daniel Beard..:

你可以做到这一点.

adjusted_datetime = (datetime_from_form.to_time - n.hours).to_datetime


请记住,这仅适用于Rails上下文.hours()方法来自Rails中的日期助手之一,而不是来自Ruby标准库.

2> 小智..:

你可以减去不到一整天:

two_hours_ago = DateTime.now - (2/24.0)

这适用于分钟和其他任何事情:

hours = 10
minutes = 5
seconds = 64

hours = DateTime.now - (hours/24.0) #
minutes = DateTime.now - (minutes/1440.0) #
seconds = DateTime.now - (seconds/86400.0) #

如果浮点算术不准确是一个问题,您可以使用Rational或其他一些安全的算术实用程序.


请注意,由于浮点运算的不准确性,这会导致意外的结果......
在那种情况下,Rational类是一个解决方案^^

3> 小智..:

如果你想更加明确这样的行为,那么advance方法很好.

adjusted = time_from_form.advance(:hours => -n)


对于任何尝试此操作的人:它不在stdlib中,它由ActiveSupport提供.请参见此处:http://stackoverflow.com/questions/617284/where-is-time-advance-documented.
谢谢jkp.我对所有这些不适合普通人的例子感到沮丧.

4> Nigel Thorne..:

你只需要脱掉一天的时间.

two_hours_ago = DateTime.now - (2.0/24)

1.0 =一天

1.0/24 = 1小时

1.0 /(24*60)= 1分钟

1.0 /(24*60*60)= 1秒



5> Mladen Jabla..:

n/24.0 由于浮点数最终被舍入,因此技巧将无法正常工作:

>> DateTime.parse('2009-06-04 02:00:00').step(DateTime.parse('2009-06-04 05:00:00'),1.0/24){|d| puts d}
2009-06-04T02:00:00+00:00
2009-06-04T03:00:00+00:00
2009-06-04T03:59:59+00:00
2009-06-04T04:59:59+00:00

但是,您可以使用Rational类:

>> DateTime.parse('2009-06-04 02:00:00').step(DateTime.parse('2009-06-04 05:00:00'),Rational(1,24)){|d| puts d}
2009-06-04T02:00:00+00:00
2009-06-04T03:00:00+00:00
2009-06-04T04:00:00+00:00
2009-06-04T05:00:00+00:00


也不是核心Ruby.
1)`step`就是为了说明点2)`step`在标准库中:http://rubydoc.info/stdlib/date/1.9.3/Date:step

6> MattW...:

如果您在Rails中工作,则存在以下超级暗示性:

> Time.now - 12.hours
=> 2019-08-19 05:50:43 +0200

(这也适用分钟,和

如果您仅使用Ruby,DateTime则不能这样做,但是Time可以:

t = Time.now
t = t - (hours*60**2)

请注意,Time它还存储日期信息,这有点奇怪。

如果您必须与 DateTime

DateTime.commercial(date.year,date.month,date.day,date.hour-x,date.minute,date.second)

可能有效,但是很难看。该医生说DateTime是不变的,所以我甚至不能肯定-,并<<

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有