ruby on rails - Rails-시간, 분, 초의 시차를 가져옵니다.



ruby-on-rails ruby-on-rails-3 (3)

그 방법은 다음과 같습니다.

Time.now.minus_with_coercion(10.seconds.ago)

10 (실제로는 9.99 ..., 10을 원하면 .round 사용 .round ).

출처 : http://apidock.com/rails/Time/minus_with_coercion

희망을 도왔습니다.

시간, 분, 초로 지정된 날짜 이후 경과 된 시간을 가져 오는 관용적 인 방법을 찾고 있습니다.

주어진 날짜가 2013-10-25 23:55:00이고 현재 날짜가 2013-10-27 20:55:09이면 반환 값은 45:03:09 여야합니다. time_differencetime_diff gem은이 요구 사항에서 작동하지 않습니다.


당신은 이것을 시도 할 수 있습니다 :

def time_diff(start_time, end_time)
  seconds_diff = (start_time - end_time).to_i.abs

  hours = seconds_diff / 3600
  seconds_diff -= hours * 3600

  minutes = seconds_diff / 60
  seconds_diff -= minutes * 60

  seconds = seconds_diff

  "#{hours.to_s.rjust(2, '0')}:#{minutes.to_s.rjust(2, '0')}:#{seconds.to_s.rjust(2, '0')}"
  # or, as hagello suggested in the comments:
  # '%02d:%02d:%02d' % [hours, minutes, seconds]
end

그리고 그것을 사용하십시오 :

time_diff(Time.now, Time.now-2.days-3.hours-4.minutes-5.seconds)
# => "51:04:04"

time_diff = Time.now - 2.minutes.ago
Time.at(time_diff.to_i.abs).utc.strftime "%H:%M:%S"
=> "00:01:59"

또는 앱이 반올림하는 것이 까다로운 경우 to_i를 다음과 같이 바꿉니다.

  Time.at(time_diff.round.abs).utc.strftime "%H:%M:%S"
   => => "00:02:00"

비록 관용적 인 부분에 대해서는 잘 모르겠다.

업데이트 : 시간 차이가 24 시간 이상으로 예상되는 경우 위 코드가 올바르지 않습니다. 이 경우 @MrYoshiji의 답을 따르거나 위의 해를 조정하여 datetime 개체의 시간을 수동으로 계산할 수 있습니다.

def test_time time_diff
  time_diff = time_diff.round.abs
  hours = time_diff / 3600

  dt = DateTime.strptime(time_diff.to_s, '%s').utc
  "#{hours}:#{dt.strftime "%M:%S"}"
end

test_time Time.now - 28.hours.ago - 2.minutes - 12.seconds
=> "27:57:48" 
test_time Time.now - 8.hours.ago - 2.minutes - 12.seconds
=> "7:57:48" 
test_time Time.now - 24.hours.ago - 2.minutes - 12.seconds
=> "23:57:48" 
test_time Time.now - 25.hours.ago - 2.minutes - 12.seconds
=> "24:57:48" 




ruby-2.0