【问题标题】:Ruby - rails - subtract date timeRuby - rails - 减去日期时间
【发布时间】:2012-05-05 23:22:44
【问题描述】:

ruby/rails 中是否有一种方法可以添加/减去日期和时间以及时区,并且输出是天数、小时数、分钟数和秒数,而不是 DataTime 格式?

t1 = "2012-05-05 00:00:02 -0400"
t2 = "2012-05-04 00:00:00 -0500"

time_diff = (Time.now() - Time.parse(t1)).to_s
#Or
time_diff = (Time.parse(t1) - Time.parse(t2)).to_s

我正在寻找1 Day, 01:59:58 结果应该#of Days HH:MM:SS格式

【问题讨论】:

  • 结果不应该是23小时2秒吗?
  • @AndrewMarshall - 是的,我做错了。手动完成所有这些数学运算太复杂了。所以基本上结果应该#of Days HH:MM:SS。 :) 试图做这个 MySql,没有运气。 Ruby 或 MySql 都会做这个数学运算。

标签: ruby ruby-on-rails-3


【解决方案1】:

据我所知,Ruby 或 Rails 没有任何内置功能可以做到这一点。有 distance_of_time_in_words,但它给出的时间比您看起来要寻找的要模糊(例如“大约 7 天”)。

不过,编写一个方法来执行此操作相当简单。给定以秒为单位的差异,这将为您提供差异的天数、小时数和秒数:

def time_length seconds
  days = (seconds / 1.day).floor
  seconds -= days.days
  hours = (seconds / 1.hour).floor
  seconds -= hours.hours
  minutes = (seconds / 1.minute).floor
  seconds -= minutes.minutes
  { days: days, hours: hours, minutes: minutes, seconds: seconds }
end

time_length(Time.parse(t1) - Time.parse(t2))
#=> {:days=>0, :hours=>23, :minutes=>0, :seconds=>2.0}

【讨论】:

  • 谢谢安德鲁!你总是在帮忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
相关资源
最近更新 更多