首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby on Rails中获得两个DateTimes之间的秒数

如何在Ruby on Rails中获得两个DateTimes之间的秒数
EN

Stack Overflow用户
提问于 2009-02-19 22:57:42
回答 7查看 72.6K关注 0票数 76

我有为员工做时间跟踪的代码。它创建一个计数器来向员工显示他们已经被打卡了多长时间。

这是当前的代码:

代码语言:javascript
复制
  start_time = Time.parse(self.settings.first_clock_in)
  total_seconds = Time.now - start_time
  hours = (total_seconds/ 3600).to_i
  minutes = ((total_seconds % 3600) / 60).to_i
  seconds = ((total_seconds % 3600) % 60).to_i

这可以很好地工作。但由于时间被限制在1970 - 2038年的范围内,我们正试图用DateTimes取代所有的时间使用。我想不出如何计算两个DateTimes之间的秒数。减去它们得到一个我不知道如何解释的理性,而减去时间得到以秒为单位的差值。

注意:从Ruby 1.9.2开始,移除了时间的硬限制。但是,时间针对1823-11-12和2116-02-20之间的值进行了优化。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-19 23:10:55

减去两个DateTimes将返回经过的时间(以天为单位),因此您可以这样做:

代码语言:javascript
复制
elapsed_seconds = ((end_time - start_time) * 24 * 60 * 60).to_i
票数 91
EN

Stack Overflow用户

发布于 2010-05-29 04:00:56

或者,更具可读性:

代码语言:javascript
复制
diff = datetime_1 - datetime_2
diff * 1.days # => difference in seconds; requires Ruby on Rails

请注意,您或其他一些搜索者可能真正在寻找的是:

代码语言:javascript
复制
diff = datetime_1 - datetime_2
Date.day_fraction_to_time(diff) # => [h, m, s, frac_s]
票数 51
EN

Stack Overflow用户

发布于 2009-02-19 23:08:56

您可以使用to_f将它们转换为浮点数,尽管这会导致与浮点数相关的精度损失。如果您只是转换为整秒的整数,那么它不应该大到足以让人担心。

结果以秒为单位:

代码语言:javascript
复制
>> end_time.to_f - start_time.to_f
=> 7.39954495429993

>> (end_time.to_f - start_time.to_f).to_i
=> 7

否则,您可以考虑对DateTime对象使用to_formatted_s,看看是否可以将输出转换为Decimal类可以接受的输出,或者只是将其格式化为纯Unix时间字符串并对其调用to_i

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/567636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档